public async Task <ApiResponse> UpdateRoleAsync([FromBody] RoleDto newRole) { try { // first make sure the role already exist if (!_roleManager.Roles.Any(r => r.Name == newRole.Name)) { return(new ApiResponse(Status400BadRequest, "This role doesn't exists")); } // Create the permissions IdentityRole <Guid> identityRole = await _roleManager.FindByNameAsync(newRole.Name); var claims = await _roleManager.GetClaimsAsync(identityRole); var permissions = claims.Where(x => x.Type == ClaimConstants.Permission).Select(x => x.Value).ToList(); foreach (var permission in permissions) { await _roleManager.RemoveClaimAsync(identityRole, new Claim(ClaimConstants.Permission, permission)); } foreach (string claim in newRole.Permissions) { var result = await _roleManager.AddClaimAsync(identityRole, new Claim(ClaimConstants.Permission, ApplicationPermissions.GetPermissionByName(claim))); if (!result.Succeeded) { await _roleManager.DeleteAsync(identityRole); } } } catch (Exception ex) { return(new ApiResponse(Status500InternalServerError, ex.Message)); } return(new ApiResponse(Status200OK)); }
public async Task <ApiResponse> CreateRoleAsync(RoleDto roleDto) { if (_roleManager.Roles.Any(r => r.Name == roleDto.Name)) { return(new ApiResponse(Status400BadRequest, L["Role {0} already exists", roleDto.Name])); } var result = await _roleManager.CreateAsync(new ApplicationRole(roleDto.Name)); if (!result.Succeeded) { var msg = string.Join(",", result.Errors.Select(i => i.Description)); _logger.LogWarning($"Error while creating role {roleDto.Name}: {msg}"); return(new ApiResponse(Status400BadRequest, msg)); } // Re-create the permissions var role = await _roleManager.FindByNameAsync(roleDto.Name); foreach (var claim in roleDto.Permissions) { var resultAddClaim = await _roleManager.AddClaimAsync(role, new Claim(ClaimConstants.Permission, _applicationPermissions.GetPermissionByName(claim))); if (!resultAddClaim.Succeeded) { await _roleManager.DeleteAsync(role); } } return(new ApiResponse(Status200OK, L["Role {0} created", roleDto.Name], roleDto)); //fix a strange System.Text.Json exception shown only in Debug_SSB }
public async Task <ApiResponse> CreateRoleAsync([FromBody] RoleDto newRole) { try { // first make sure the role doesn't already exist if (_roleManager.Roles.Any(r => r.Name == newRole.Name)) { return(new ApiResponse(Status400BadRequest, "Role already exists")); } // Create the role var result = await _roleManager.CreateAsync(new IdentityRole <Guid>(newRole.Name)); if (!result.Succeeded) { string errorMessage = result.Errors.Select(x => x.Description).Aggregate((i, j) => i + " - " + j); return(new ApiResponse(Status500InternalServerError, errorMessage)); } // Re-create the permissions IdentityRole <Guid> role = await _roleManager.FindByNameAsync(newRole.Name); foreach (string claim in newRole.Permissions) { var resultAddClaim = await _roleManager.AddClaimAsync(role, new Claim(ClaimConstants.Permission, ApplicationPermissions.GetPermissionByName(claim))); if (!resultAddClaim.Succeeded) { await _roleManager.DeleteAsync(role); } } } catch (Exception ex) { return(new ApiResponse(Status500InternalServerError, ex.Message)); } return(new ApiResponse(Status200OK)); }