//****************************************************************************************************** // ClaimAttribute.cs - Gbtc // // Copyright © 2021, Grid Protection Alliance. All Rights Reserved. // // Licensed to the Grid Protection Alliance (GPA) under one or more contributor license agreements. See // the NOTICE file distributed with this work for additional information regarding copyright ownership. // The GPA licenses this file to you under the MIT License (MIT), the "License"; you may not use this // file except in compliance with the License. You may obtain a copy of the License at: // // http://opensource.org/licenses/MIT // // Unless agreed to in writing, the subject software distributed under the License is distributed on an // "AS-IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. Refer to the // License for the specific language governing permissions and limitations. // // Code Modification History: // ---------------------------------------------------------------------------------------------------- // 09/22/2021 - Billy Ernest // Generated original version of source code. // //****************************************************************************************************** using System; using System.Linq; using System.Security.Claims; namespace GSF.Data.Model { /// /// Defines an attribute that will allow setting claims for function roles for a modeled table in GSF.Web.Model.ModelController. /// [AttributeUsage(AttributeTargets.Class, AllowMultiple = true)] public sealed class ClaimAttribute : Attribute { /// /// Gets Claim to use for property. /// public Claim Claim { get; } /// /// Get Verb to use for property /// public string Verb { get; } /// /// Creates a new for use in GSF.Web.Model.ModelController"/>. /// /// HTTP verbs of GET, POST, PATCH, or DELETE. /// Type of claim, use specific . /// value of the claim. public ClaimAttribute(string verb, string type, string value) { string[] verbs = new string[] { "GET", "POST", "PATCH", "DELETE" }; Verb = verb.ToUpper(); if (!verbs.Any(v => v == Verb)) throw new Exception("Incorrect verbs used in defining model claims, please use GET, POST, PATCH, or DELETE"); string[] claimTypes = typeof(ClaimTypes).GetFields().Where(x => x.FieldType.FullName == "System.String").Select(field => typeof(ClaimTypes).GetField(field.Name).GetRawConstantValue().ToString()).ToArray(); if (!claimTypes.Any(c => c == type)) throw new Exception("Incorrect type used in defining model type, please use specific System.Security.Claims.ClaimTypes when defining claims"); Claim = new Claim(type, value); } } }