Exemple #1
0
        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)));
        }
Exemple #2
0
        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));
        }