using System.Collections.Generic; using System.Linq; using System.Threading.Tasks; using Microsoft.AspNetCore.Identity; using xCommons.Extensions; using xExceptions.Constants; using xIdentityModels; namespace xIds.Providers { public partial class XIdentityManager { // #region Role Actions ... /// /// Check a Role exists or not /// /// role name /// a boolean value public async Task IsRoleExistsAsync( string roleName ) { // if (roleName.IsNullOrEmpty()) { XException.InvalidArgs.Throw(); } // return await RoleManager.RoleExistsAsync(roleName); } /// /// Create a new Role /// /// role name /// an instance of IdentityResult public async Task CreateRoleAsync( string roleName ) { // var isExists = await RoleManager .RoleExistsAsync(roleName); if (isExists) { XException.Duplicate.Throw(); } // var result = await RoleManager .CreateAsync(new IdentityRole(roleName)); // return result; } /// /// Get a Role /// /// role name /// an instance of IdentityRole public async Task GetRoleAsync( string roleName ) { // var isExists = await IsRoleExistsAsync(roleName); if (!isExists) { XException.NotFound.Throw(); } // var result = await RoleManager .FindByNameAsync(roleName); // return result; } /// /// Remove a User From Role /// /// an instance of XUser /// role name /// an instance of IdentityResult public async Task RemoveFromRoleAsync( XUser user, string roleName ) { return await UserManager.RemoveFromRoleAsync(user, roleName); } /// /// Remove a User From Roles /// /// an instance of XUser /// a collection of role names /// an instance of IdentityResult public async Task RemoveFromRolesAsync( XUser user, IEnumerable roleNames ) { return await UserManager.RemoveFromRolesAsync(user, roleNames); } /// /// Assign a User to Specific Role /// /// an instance of XUser /// role name /// an instance of IdentityResult public async Task AddUserToRoleAsync( XUser user, string roleName ) { // if (user == null || roleName.IsNullOrEmpty()) { XException.InvalidArgs.Throw(); } // var userSelectByParam = GetUserSelectByParam(user); var isExistsUser = await IsUserExistsAsync(userSelectByParam); var isExistsRole = await IsRoleExistsAsync(roleName); if (!isExistsUser || !isExistsRole) { XException.NotFound.Throw(); } // var result = await UserManager .AddToRoleAsync(user, roleName); // return result; } /// /// Retrieve Role Name by it's ID /// /// role id /// role name as string public async Task GetRoleNameAsync( string roleId ) { // // Validate Args ... if (roleId.IsNullOrEmpty()) { XException.InvalidArgs.Throw(); } // var role = await RoleManager .FindByIdAsync(roleId); // return role.Name.ToNormalString(); } /// /// Get a List Of User Roles /// /// user identifier /// /// /// a collection of role names public async Task> GetRoleNamesAsync( string userSelectByParam, bool checkCanLoginPolicies = true, bool checkIsBanned = true ) { // // Validate Args ... if (userSelectByParam.IsNullOrEmpty()) { XException.InvalidArgs.Throw(); } // var user = await ValidateUserExistsAndRetrieve( userSelectByParam, containDetails: true, checkCanLoginPolicies: checkCanLoginPolicies, checkIsBanned: checkIsBanned ); // var result = new List(); foreach (var role in user.Roles) { // var roleName = await GetRoleNameAsync(role.RoleId); roleName = roleName.ToNormalString(); // result.Add(roleName); } // return result; } /// /// Check a User is Adminr not /// /// user identifier /// a boolean value public async Task IsAdmin( string userSelectByParam ) { // // Validate Args ... ValidationProvider.NotEmpty(userSelectByParam); // var user = await ValidateUserExistsAndRetrieve( userSelectByParam, containDetails: true, checkCanLoginPolicies: true); // var result = await IsAdmin(user); // return result; } /// /// Check a User is Adminr not /// /// an instance of XUser /// a boolean value public async Task IsAdmin( XUser user ) { // // Validate Args ... ValidationProvider.NotNull(user); ValidationProvider.NotEmpty(user.Id); // // Retrieve Admin Role ... // TODO: Fix this ... var adminRole = "admin"; // XUserRole.Admin // .GetStringValue () // .ToNormalString (); // // Check Admin Role Exists in User Roles or not ... var userRoleNames = await GetRoleNamesAsync(user.Id); var isContainsAdminRole = userRoleNames.Contains(adminRole); // // Return Result ... return isContainsAdminRole; } #endregion } }