public ScopedRoleAssignmentsController(IMapper mapper, UserManager <ApplicationUser> userManager, RoleManager <ApplicationRole> roleManager, FurizaUserScopedRoleStore furizaUserScopedRoleStore, IdentityErrorDescriber identityErrorDescriber = null) { this.mapper = mapper ?? throw new ArgumentNullException(nameof(mapper)); this.userManager = userManager ?? throw new ArgumentNullException(nameof(userManager)); this.roleManager = roleManager ?? throw new ArgumentNullException(nameof(roleManager)); this.furizaUserScopedRoleStore = furizaUserScopedRoleStore ?? throw new ArgumentNullException(nameof(furizaUserScopedRoleStore)); this.identityErrorDescriber = identityErrorDescriber ?? throw new ArgumentNullException(nameof(identityErrorDescriber)); }
public async Task <IActionResult> DeleteAsync(string roleName, [FromServices] FurizaUserScopedRoleStore furizaUserScopedRoleStore) { foreach (FieldInfo fieldInfo in typeof(FurizaMasterRoles).GetFields().Where(x => x.IsStatic && x.IsLiteral)) { if (fieldInfo.GetValue(typeof(FurizaMasterRoles)).ToString() == roleName.Trim().ToLower()) { throw new DefaultRoleViolatedException(); } } var role = await roleManager.Roles .Include(u => u.IdentityUserRoles) .SingleOrDefaultAsync(u => u.NormalizedName == roleName.Trim().ToUpper()); if (role == null) { throw new ResourceNotFoundException(new[] { SecurityResourceNotFoundExceptionItem.Role }); } if (role.IdentityUserRoles != null && role.IdentityUserRoles.Any()) { throw new RoleInUseException(); } if (await furizaUserScopedRoleStore.IsRoleInUse(roleName)) { throw new RoleInUseException(); } var deleteResult = await roleManager.DeleteAsync(role); if (!deleteResult.Succeeded) { throw new IdentityOperationException(deleteResult.Errors.Select(e => new IdentityOperationExceptionItem(e.Code, e.Description))); } return(NoContent()); }