public async Task <IActionResult> AddUserRole([FromRoute] string userId, [FromRoute] string roleId) { var user = await _userManager.FindByIdAsync(userId); if (user == null) { return(NotFound()); } var role = await _roleManager.FindByIdAsync(roleId); if (role == null) { return(NotFound()); } if (await _userManager.IsInRoleAsync(user, role.Name)) { return(BadRequest(new ValidationProblemDetails(new Dictionary <string, string[]> { { $"{nameof(roleId)}", new[] { $"User {user.Email} is already a member of role {role.Name}." } } }))); } var result = await _userManager.AddToRoleAsync(user, role.Name); if (!result.Succeeded) { return(BadRequest(result.Errors.ToValidationProblemDetails())); } if (role.IsManagementRole()) { var clientId = User.FindFirst(JwtClaimTypes.ClientId); await _persistedGrantService.RemoveAllGrantsAsync(userId, clientId?.Value); } return(NoContent()); }
public async Task <IActionResult> AddUserRole([FromRoute] string userId, [FromRoute] string roleId) { var user = await _userManager.FindByIdAsync(userId); if (user == null) { return(NotFound()); } var role = await _roleManager.FindByIdAsync(roleId); if (role == null) { return(NotFound()); } if (await _userManager.IsInRoleAsync(user, role.Name)) { return(BadRequest(new ValidationProblemDetails(new Dictionary <string, string[]> { { $"{nameof(roleId)}", new[] { $"User {user.Email} is already a member of role {role.Name}." } } }))); } await _userManager.AddToRoleAsync(user, role.Name); return(NoContent()); }
public async Task <IActionResult> ValidatePassword([FromBody] ValidatePasswordRequest request) { if (!ModelState.IsValid) { return(BadRequest(new ValidationProblemDetails(ModelState))); } User user = null; if (!string.IsNullOrWhiteSpace(request.Token) && Base64Id.TryParse(request.Token, out var userId)) { user = await _userManager.FindByIdAsync(userId.Id.ToString()); } var userAvailable = user != null; var userNameAvailable = !string.IsNullOrWhiteSpace(request.UserName); var availableRules = GetAvailableRules(userAvailable, userNameAvailable).ToDictionary(rule => rule.Key, rule => new PasswordRuleInfo { Code = rule.Key, IsValid = true, Description = rule.Value.Description, Requirement = rule.Value.Hint }); foreach (var validator in _userManager.PasswordValidators) { var userInstance = user ?? (userNameAvailable ? new User { UserName = request.UserName } : new User()); var result = await validator.ValidateAsync(_userManager, userInstance, request.Password ?? string.Empty); if (!result.Succeeded) { foreach (var error in result.Errors) { if (availableRules.ContainsKey(error.Code)) { availableRules[error.Code].IsValid = false; } } } } return(Ok(new CredentialsValidationInfo { PasswordRules = availableRules.Values.ToList() })); }