
### 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<string, AuthorizationPolicy> GetXAuthorizationPolicies()
        {
            //
            var result = new Dictionary<string, AuthorizationPolicy>();

            //
            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
    {
        /// <summary>
        /// Must Top Role of System ...
        /// </summary>
        public const string ADMIN = "admin";

        /// <summary>
        /// مدیر مسئول
        /// </summary>
        public const string RESPONSIBLE_MANAGER = "responsible_manager";

        /// <summary>
        /// روزنامه نگار
        /// </summary>
        public const string JOURNALIST = "journalist";

        /// <summary>
        /// سر دبیر
        /// </summary>
        public const string CHIEF_CLERK = "chief_clerk";

        /// <summary>
        /// دستیار سرد بیر
        /// </summary>
        public const string CHIEF_CLERK_ASSISTANT = "chief_clerk_assistant";

        /// <summary>
        /// دبیر
        /// </summary>
        public const string ACTUARY = "actuary";

        /// <summary>
        /// دستیار دبیر
        /// </summary>
        public const string ACTUARY_ASSISTANT = "actuary_assistant";

        /// <summary>
        /// خبرنگار
        /// </summary>
        public const string REPORTER = "reporter";

        /// <summary>
        /// دستیار خبرنگار
        /// </summary>
        public const string REPORTER_ASSISTANT = "reporter_assistant";

        /// <summary>
        /// دستیار
        /// </summary>
        public const string AGENT = "agent";

        /// <summary>
        /// کاربر
        /// </summary>
        public const string USER = "user";
    }

    public enum XUserRole
    {
        /// <summary>
        /// Must Top Role of System ...
        /// </summary>
        [StringValue("admin")]
        Admin = 10,

        /// <summary>
        /// مدیر مسئول
        /// </summary>
        [StringValue("responsible_manager")]
        ResponsibleManager = 9,

        /// <summary>
        /// روزنامه نگار
        /// </summary>
        [StringValue("journalist")]
        Journalist = 8,

        /// <summary>
        /// سر دبیر
        /// </summary>
        [StringValue("chief_clerk")]
        ChiefClerk = 7,

        /// <summary>
        /// دستیار سرد بیر
        /// </summary>
        [StringValue("chief_clerk_assistant")]
        ChiefClerkAssistant = 6,

        /// <summary>
        /// دبیر
        /// </summary>
        [StringValue("actuary")]
        Actuary = 5,

        /// <summary>
        /// دستیار دبیر
        /// </summary>
        [StringValue("actuary_assistant")]
        ActuaryAssistant = 4,

        /// <summary>
        /// خبرنگار
        /// </summary>
        [StringValue("reporter")]
        Reporter = 3,

        /// <summary>
        /// دستیار خبرنگار
        /// </summary>
        [StringValue("reporter_assistant")]
        ReporterAssistant = 2,

        /// <summary>
        /// دستیار
        /// </summary>
        [StringValue("agent")]
        Agent = 1,

        /// <summary>
        /// کاربر
        /// </summary>
        [StringValue("user")]
        User = 0
    }

    public static class XUserRoleHelper
    {
        public static List<string> GetAllRoles()
        {
            //
            var result = new List<string>
            {
                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
    {
        /// <summary>
        /// Check User Claims ia Admin Role or not ...
        /// </summary>
        /// <param name="source"></param>
        /// <returns></returns>
        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;
        }

        /// <summary>
        /// Check Actor is Valid for UserSelectByParam or not ...
        /// </summary>
        /// <param name="source"></param>
        /// <param name="userSelectByParam"></param>
        /// <returns></returns>
        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
    {
        /// <summary>
        /// Converts an String to XUserRole ...
        /// </summary>
        /// <param name="role"></param>
        /// <returns></returns>
        public static XUserRole ToXUserRole(this string role)
        {
            //
            var result = XUserRole.User;

            //
            // Validate ...
            if (role.IsNullOrEmpty())
            {
                XException.InvalidArgs.Throw();
            }

            //
            var roles = new List<string>
            {
                role
            };
            result = roles.GetTopRole();

            //
            return result;
        }

        /// <summary>
        /// Retrieve User Top Role based on Role Lists ... 
        /// </summary>
        /// <param name="roles"></param>
        /// <returns></returns>
        public static XUserRole GetTopRole(this IEnumerable<string> 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;
        }

        /// <summary>
        /// Check User Roles has Specified Permissions or not ...
        /// </summary>
        /// <param name="roles"></param>
        /// <param name="role"></param>
        /// <returns></returns>
        public static bool HasRolePermissions(this IEnumerable<string> 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<string> 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;
        }
    }
}
