public async Task <IActionResult> Remove([FromForm] RoleRemoveModel model, CancellationToken cancellationToken) { model.ClaimType = Identity.Constants.ClaimType.ManagesTeam.ToLowerInvariant() == model.ClaimType?.ToLowerInvariant() ? Identity.Constants.ClaimType.ManagesTeam : Identity.Constants.ClaimType.PlaysInTeam; model.ReturnUrl ??= _defaultReturnUrl; if (!(await _authorizationService.AuthorizeAsync(User, new TeamEntity(model.TeamId), Authorization.TeamOperations.RemoveTeamMember)).Succeeded) { return(JsonAjaxRedirectForModal(Url.Action(nameof(Error.AccessDenied), nameof(Error), new { model.ReturnUrl }))); } if (model.ClaimType == Identity.Constants.ClaimType.ManagesTeam && (await _tenantContext.DbContext.AppDb.ManagerOfTeamRepository.GetManagerIdsOfTeamAsync(model.TeamId, cancellationToken)).Count <= 1) { _logger.LogInformation("Rejected to remove last claim '{0}' for team id '{1}' and user id {2}", model.ClaimType, model.TeamId, model.UserId); return(JsonAjaxRedirectForModal(SetCannotRemoveLastTeamManagerReturnResult(model.ReturnUrl, model.TeamId))); } var removeTeamMember = await _signInManager.UserManager.FindByIdAsync(model.UserId.ToString()); if (removeTeamMember != null) { await _signInManager.UserManager.RemoveClaimAsync(removeTeamMember, new Claim(model.ClaimType, model.TeamId.ToString())); try { var result = await _signInManager.UserManager.UpdateAsync(removeTeamMember); if (result != IdentityResult.Success) { throw new Exception($"Updating user id '{removeTeamMember.Id}'"); } } catch (Exception e) { _logger.LogError(e, "Failed to remove claim '{0}' for team id '{1}' and user id {2}", model.ClaimType, model.TeamId, model.UserId); return(JsonAjaxRedirectForModal(SetAdjustedReturnResult(nameof(Remove), model.ReturnUrl, model.TeamId, false))); } } return(JsonAjaxRedirectForModal(SetAdjustedReturnResult(nameof(Remove), model.ReturnUrl, model.TeamId, true))); }
public async Task <IActionResult> Remove(string roleName, long uid, long tid, string un, string returnUrl, CancellationToken cancellationToken) { var model = new RoleRemoveModel { TeamId = tid, UserId = uid, UserName = un, ClaimType = Identity.Constants.ClaimType.ManagesTeam.ToLowerInvariant() == roleName?.ToLowerInvariant() ? Identity.Constants.ClaimType.ManagesTeam : Identity.Constants.ClaimType.PlaysInTeam, ReturnUrl = Url.IsLocalUrl(returnUrl) ? returnUrl : _defaultReturnUrl }; if (!(await _authorizationService.AuthorizeAsync(User, new TeamEntity(model.TeamId), Authorization.TeamOperations.RemoveTeamMember)).Succeeded) { return(JsonAjaxRedirectForModal(Url.Action(nameof(Error.AccessDenied), nameof(Error), new { model.ReturnUrl }))); } return(PartialView(ViewNames.Role._RemoveMemberModalPartial, model)); }