### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xIdentityHelper\XApiScopeHelper.cs using xExceptions.Attributes; namespace xIdentityHelper { public static class XApiScopeHelper { public partial struct XApiScopes { public const string Read = "XAPI.read"; public const string Write = "XAPI.write"; public const string Admin = "XAPI.admin"; public const string Manage = "manage"; } public enum XApiScope { [StringValue ("XAPI.read")] Read, [StringValue ("XAPI.write")] Write, [StringValue ("XAPI.admin")] Admin, [StringValue ("manage")] Manage, } } } ### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xIdentityHelper\XAuthorizationHelper.cs using System.Collections.Generic; using IdentityModel; using Microsoft.AspNetCore.Authorization; using xCommons.Authorization; using xCommons.Constants; using xCommons.Extensions; using static xIdentityHelper.XApiScopeHelper; namespace xIdentityHelper { public class XAuthorizationHelper { public static IDictionary GetXAuthorizationPolicies() { // var result = new Dictionary(); // RequiredRolesRequirement roleRequirements = null; // #region Build Policies ... // // Scope Policies ... #region Scope Policies ... // // Read Scope ... result.Add(XPolicies.ReadAccess, new AuthorizationPolicyBuilder() .RequireClaim(JwtClaimTypes.Scope, XApiScopes.Read) .Build() ); // // Write Scope ... result.Add(XPolicies.WriteAccess, new AuthorizationPolicyBuilder() .RequireClaim( JwtClaimTypes.Scope, XApiScopes.Read, XApiScopes.Write ) .Build() ); // // Admin Scope ... result.Add(XPolicies.AdminAccess, new AuthorizationPolicyBuilder() .RequireClaim( JwtClaimTypes.Scope, XApiScopes.Read, XApiScopes.Write, XApiScopes.Admin ) .Build() ); // // Manage Scope ... result.Add(XPolicies.ManageAccess, new AuthorizationPolicyBuilder() .RequireClaim( JwtClaimTypes.Scope, XApiScopes.Read, XApiScopes.Write, XApiScopes.Admin, XApiScopes.Manage ) .Build() ); #endregion // // Roles Policies ... #region Roles Policies ... // // User ... #region User Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.USER, XUserRoles.AGENT, XUserRoles.REPORTER_ASSISTANT, XUserRoles.REPORTER, XUserRoles.ACTUARY_ASSISTANT, XUserRoles.ACTUARY, XUserRoles.CHIEF_CLERK_ASSISTANT, XUserRoles.CHIEF_CLERK, XUserRoles.JOURNALIST, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // User Policy ... result.Add(XPolicies.User, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled User Policy ... result.Add(XPolicies.EnabledUser, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // Agent ... #region Agent Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.AGENT, XUserRoles.REPORTER_ASSISTANT, XUserRoles.REPORTER, XUserRoles.ACTUARY_ASSISTANT, XUserRoles.ACTUARY, XUserRoles.CHIEF_CLERK_ASSISTANT, XUserRoles.CHIEF_CLERK, XUserRoles.JOURNALIST, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // Agent Policy ... result.Add(XPolicies.Agent, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled Agent Policy ... result.Add(XPolicies.EnabledAgent, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // ReporterAssistant ... #region Reporter Assistant Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.REPORTER_ASSISTANT, XUserRoles.REPORTER, XUserRoles.ACTUARY_ASSISTANT, XUserRoles.ACTUARY, XUserRoles.CHIEF_CLERK_ASSISTANT, XUserRoles.CHIEF_CLERK, XUserRoles.JOURNALIST, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // ReporterAssistant ... result.Add(XPolicies.ReporterAssistant, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled ReporterAssistant ... result.Add(XPolicies.EnabledReporterAssistant, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // Reporter ... #region Reporter Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.REPORTER, XUserRoles.ACTUARY_ASSISTANT, XUserRoles.ACTUARY, XUserRoles.CHIEF_CLERK_ASSISTANT, XUserRoles.CHIEF_CLERK, XUserRoles.JOURNALIST, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // Reporter ... result.Add(XPolicies.Reporter, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled Reporter ... result.Add(XPolicies.EnabledReporter, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // ActuaryAssistant ... #region Actuary Assistant Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.ACTUARY_ASSISTANT, XUserRoles.ACTUARY, XUserRoles.CHIEF_CLERK_ASSISTANT, XUserRoles.CHIEF_CLERK, XUserRoles.JOURNALIST, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // ActuaryAssistant ... result.Add(XPolicies.ActuaryAssistant, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled ActuaryAssistant ... result.Add(XPolicies.EnabledActuaryAssistant, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // Actuary ... #region Actuary Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.ACTUARY, XUserRoles.CHIEF_CLERK_ASSISTANT, XUserRoles.CHIEF_CLERK, XUserRoles.JOURNALIST, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // Actuary ... result.Add(XPolicies.Actuary, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled Actuary ... result.Add(XPolicies.EnabledActuary, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // ChiefClerkAssistant ... #region Chief Clerk Assistant Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.CHIEF_CLERK_ASSISTANT, XUserRoles.CHIEF_CLERK, XUserRoles.JOURNALIST, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // ChiefClerkAssistant ... result.Add(XPolicies.ChiefClerkAssistant, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled ChiefClerkAssistant ... result.Add(XPolicies.EnabledChiefClerkAssistant, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // ChiefClerk ... #region Chief Clerk Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.CHIEF_CLERK, XUserRoles.JOURNALIST, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // ChiefClerk ... result.Add(XPolicies.ChiefClerk, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled ChiefClerk ... result.Add(XPolicies.EnabledChiefClerk, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // Journalist ... #region Journalist Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.JOURNALIST, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // Journalist ... result.Add(XPolicies.Journalist, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled Journalist ... result.Add(XPolicies.EnabledJournalist, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // ResponsibleManager ... #region Responsible Manager Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.ADMIN ); // // ResponsibleManager ... result.Add(XPolicies.ResponsibleManager, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled ResponsibleManager ... result.Add(XPolicies.EnabledResponsibleManager, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion // // Admin ... #region Admin Related Policies ... // roleRequirements = new RequiredRolesRequirement( XUserRoles.ADMIN ); // // Admin Policy ... result.Add(XPolicies.Admin, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .Build() ); // // Enabled Admin Policy ... result.Add(XPolicies.EnabledAdmin, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(roleRequirements) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion #endregion // // Complex Policies ... #region AdminOrAgent Related Policies ... // // Admin Or Agent Policy ... result.Add(XPolicies.AdminOrAgent, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(new RequiredRolesRequirement( XUserRoles.ADMIN, XUserRoles.AGENT )) .Build() ); // // Enabled Admin Or Agent Policy ... result.Add(XPolicies.EnabledAdminOrAgent, new AuthorizationPolicyBuilder() .RequireAuthenticatedUser() .AddRequirements(new RequiredRolesRequirement( XUserRoles.ADMIN, XUserRoles.AGENT )) .RequireClaim( XCustomClaims.IsBanned, false.ToString(), false.ToString() .ToNormalString() ) .RequireClaim( XCustomClaims.IsEnabled, true.ToString(), true.ToString() .ToNormalString() ) .Build() ); #endregion #endregion // return result; } } } ### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xIdentityHelper\XPolicies.cs namespace xIdentityHelper { public partial struct XPolicies { // // Scopes ... public const string ReadAccess = "readScopePolicy"; public const string WriteAccess = "writeScopePolicy"; public const string AdminAccess = "adminScopePolicy"; public const string ManageAccess = "manageScopePolicy"; // // Admin ... public const string Admin = "adminPolicy"; public const string EnabledAdmin = "enabledAdminPolicy"; // // Responsible Manager ... public const string ResponsibleManager = "responsibleManagerPolicy"; public const string EnabledResponsibleManager = "enabledResponsibleManagerPolicy"; // // Journalist ... public const string Journalist = "journalistPolicy"; public const string EnabledJournalist = "enabledJournalistPolicy"; // // Chief Clerk ... public const string ChiefClerk = "chiefClerkPolicy"; public const string EnabledChiefClerk = "enabledChiefClerkPolicy"; // // Chief Clerk Assistant ... public const string ChiefClerkAssistant = "chiefClerkAssistantPolicy"; public const string EnabledChiefClerkAssistant = "enabledChiefClerkAssistantPolicy"; // // Actuary ... public const string Actuary = "actuaryPolicy"; public const string EnabledActuary = "enabledActuaryPolicy"; // // Actuary Assistant ... public const string ActuaryAssistant = "actuaryAssistantPolicy"; public const string EnabledActuaryAssistant = "enabledActuaryAssistantPolicy"; // // Reporter ... public const string Reporter = "reporterPolicy"; public const string EnabledReporter = "enabledReporterPolicy"; // // Reporter Assistant ... public const string ReporterAssistant = "reporterAssistantPolicy"; public const string EnabledReporterAssistant = "enabledReporterAssistantPolicy"; // // Agent ... public const string Agent = "agentPolicy"; public const string EnabledAgent = "enabledAgentPolicy"; // // User ... public const string User = "userPolicy"; public const string EnabledUser = "enabledUserPolicy"; // // Complex Policies ... public const string AdminOrAgent = "adminOrAgentPolicy"; public const string EnabledAdminOrAgent = "enabledAdminOrAgentPolicy"; } } ### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xIdentityHelper\XUserRoles.cs using System.Collections.Generic; using xExceptions.Attributes; namespace xIdentityHelper { public partial struct XUserRoles { /// /// Must Top Role of System ... /// public const string ADMIN = "admin"; /// /// مدیر مسئول /// public const string RESPONSIBLE_MANAGER = "responsible_manager"; /// /// روزنامه نگار /// public const string JOURNALIST = "journalist"; /// /// سر دبیر /// public const string CHIEF_CLERK = "chief_clerk"; /// /// دستیار سرد بیر /// public const string CHIEF_CLERK_ASSISTANT = "chief_clerk_assistant"; /// /// دبیر /// public const string ACTUARY = "actuary"; /// /// دستیار دبیر /// public const string ACTUARY_ASSISTANT = "actuary_assistant"; /// /// خبرنگار /// public const string REPORTER = "reporter"; /// /// دستیار خبرنگار /// public const string REPORTER_ASSISTANT = "reporter_assistant"; /// /// دستیار /// public const string AGENT = "agent"; /// /// کاربر /// public const string USER = "user"; } public enum XUserRole { /// /// Must Top Role of System ... /// [StringValue("admin")] Admin = 10, /// /// مدیر مسئول /// [StringValue("responsible_manager")] ResponsibleManager = 9, /// /// روزنامه نگار /// [StringValue("journalist")] Journalist = 8, /// /// سر دبیر /// [StringValue("chief_clerk")] ChiefClerk = 7, /// /// دستیار سرد بیر /// [StringValue("chief_clerk_assistant")] ChiefClerkAssistant = 6, /// /// دبیر /// [StringValue("actuary")] Actuary = 5, /// /// دستیار دبیر /// [StringValue("actuary_assistant")] ActuaryAssistant = 4, /// /// خبرنگار /// [StringValue("reporter")] Reporter = 3, /// /// دستیار خبرنگار /// [StringValue("reporter_assistant")] ReporterAssistant = 2, /// /// دستیار /// [StringValue("agent")] Agent = 1, /// /// کاربر /// [StringValue("user")] User = 0 } public static class XUserRoleHelper { public static List GetAllRoles() { // var result = new List { XUserRoles.ADMIN, XUserRoles.RESPONSIBLE_MANAGER, XUserRoles.JOURNALIST, XUserRoles.CHIEF_CLERK, XUserRoles.CHIEF_CLERK_ASSISTANT, XUserRoles.ACTUARY, XUserRoles.ACTUARY_ASSISTANT, XUserRoles.REPORTER, XUserRoles.REPORTER_ASSISTANT, XUserRoles.AGENT, XUserRoles.USER }; // return result; } } } ### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xIdentityHelper\Extensions\XIdentityHelperExtensions.cs using System; using System.Linq; using xCommons.Extensions; using xIdentityModels.Models; namespace xIdentityHelper.Extensions { public static class XIdentityHelperExtensions { /// /// Check User Claims ia Admin Role or not ... /// /// /// public static bool IsAdmin(this XUserClaimsInfoDto source) { // var result = false; // if (source.IsNull() || source.Roles.IsNull() || !source.Roles.HasChild()) { return result; } // result = source.Roles.Contains(XUserRoles.ADMIN); // return result; } /// /// Check Actor is Valid for UserSelectByParam or not ... /// /// /// /// public static bool IsValidActor(this XUserClaimsInfoDto source, string userSelectByParam) { // var result = false; // if (source.IsNull() || userSelectByParam.IsNullOrEmpty()) { return result; } // bool isAdmin = source.IsAdmin(); result = isAdmin || userSelectByParam == source.Email || userSelectByParam == source.UserId || userSelectByParam == source.UserName || userSelectByParam == source.PhoneNumber; // return result; } } } ### FILE: C:\Users\SaherElm\Documents\Projects\xSaherelmWorkspace\Modules\xIdentityHelper\Extensions\XUserRoleExtensions.cs using System; using System.Collections.Generic; using System.Linq; using xCommons.Extensions; using xExceptions.Constants; namespace xIdentityHelper.Extensions { public static class XUserRoleExtensions { /// /// Converts an String to XUserRole ... /// /// /// public static XUserRole ToXUserRole(this string role) { // var result = XUserRole.User; // // Validate ... if (role.IsNullOrEmpty()) { XException.InvalidArgs.Throw(); } // var roles = new List { role }; result = roles.GetTopRole(); // return result; } /// /// Retrieve User Top Role based on Role Lists ... /// /// /// public static XUserRole GetTopRole(this IEnumerable roles) { // // Validate ... if (roles.IsNull() || !roles.HasChild()) { XException.InvalidArgs.Throw(); } // // Normalize Roles ... roles = roles.Select(r => r.ToNormalString()); // var result = XUserRole.User; // // Admin ... if (roles.Contains(XUserRole.Admin.GetStringValue().ToNormalString())) { result = XUserRole.Admin; } // // ResponsibleManager ... else if (roles.Contains(XUserRole.ResponsibleManager.GetStringValue().ToNormalString())) { result = XUserRole.ResponsibleManager; } // // Journalist ... else if (roles.Contains(XUserRole.Journalist.GetStringValue().ToNormalString())) { result = XUserRole.Journalist; } // // ChiefClerk ... else if (roles.Contains(XUserRole.ChiefClerk.GetStringValue().ToNormalString())) { result = XUserRole.ChiefClerk; } // // ChiefClerkAssistant ... else if (roles.Contains(XUserRole.ChiefClerkAssistant.GetStringValue().ToNormalString())) { result = XUserRole.ChiefClerkAssistant; } // // Actuary ... else if (roles.Contains(XUserRole.Actuary.GetStringValue().ToNormalString())) { result = XUserRole.Actuary; } // // ActuaryAssistant ... else if (roles.Contains(XUserRole.ActuaryAssistant.GetStringValue().ToNormalString())) { result = XUserRole.ActuaryAssistant; } // // Reporter ... else if (roles.Contains(XUserRole.Reporter.GetStringValue().ToNormalString())) { result = XUserRole.Reporter; } // // ReporterAssistant ... else if (roles.Contains(XUserRole.ReporterAssistant.GetStringValue().ToNormalString())) { result = XUserRole.ReporterAssistant; } // // Agent ... else if (roles.Contains(XUserRole.Agent.GetStringValue().ToNormalString())) { result = XUserRole.Agent; } // // User ... else if (roles.Contains(XUserRole.User.GetStringValue().ToNormalString())) { result = XUserRole.User; } else { XException.InvalidData.Throw(); } // return result; } /// /// Check User Roles has Specified Permissions or not ... /// /// /// /// public static bool HasRolePermissions(this IEnumerable roles, XUserRole role) { // // Validate ... var result = !roles.IsNull() && roles.HasChild(); if (!result) { return result; } // try { // var topRole = roles.GetTopRole(); // result = (int)topRole >= (int)role; } catch { result = false; } // return result; } public static bool HasRolePermissions(this IEnumerable roles, string role) { // // Validate ... var result = !roles.IsNull() && roles.HasChild() && !role.IsNullOrEmpty(); if (!result) { return result; } // var roleEnum = role.ToXUserRole(); result = roles.HasRolePermissions(roleEnum); // return result; } } }