Exemple #1
0
        private async Task <BaseApiResponse> AddOrRemoveUserRoleAsync(UserIdAndRole userIdAndRole, bool addOrRemove, bool checkUserWhoEdits = true)
        {
            var role = await Query <ApplicationRole>().FirstOrDefaultAsync(x => x.Name == userIdAndRole.Role);

            if (role == null)
            {
                return(new BaseApiResponse(false, $"Роль не найдена по названию {userIdAndRole.Role}. (Возможно она еще не создана)"));
            }

            var userRepo = GetRepository <ApplicationUser>();

            //Находим того, кого будем редактировать
            var user = await userRepo.Query().FirstOrDefaultAsync(x => x.Id == userIdAndRole.UserId);

            if (user == null)
            {
                return(new BaseApiResponse(false, "Изменяемый пользователь не найден"));
            }

            if (checkUserWhoEdits)
            {
                var checkResponse = await CheckUserWhoEdits(user, role.Name);

                if (!checkResponse.IsSucceeded)
                {
                    return(checkResponse);
                }
            }

            var userRole = await Query <ApplicationUserRole>().FirstOrDefaultAsync(x => x.RoleId == role.Id && x.UserId == user.Id);

            var isInRoleResult = userRole != null;

            if (isInRoleResult && addOrRemove)
            {
                return(new BaseApiResponse(false, $"У пользователя уже есть роль \"{role.Name}\""));
            }

            if (!isInRoleResult && !addOrRemove)
            {
                return(new BaseApiResponse(false, $"У пользователя уже и так нет роли \"{role.Name}\""));
            }

            if (addOrRemove)
            {
                CreateHandled(new ApplicationUserRole
                {
                    RoleId = role.Id,
                    UserId = user.Id
                });
            }
            else
            {
                DeleteHandled(userRole);
            }

            return(await TrySaveChangesAndReturnResultAsync(addOrRemove?$"Роль \"{role.Name}\" добавлена" : $"Роль \"{role.Name}\" удалена"));
        }
Exemple #2
0
 /// <summary>
 /// Удалить роль у пользователя
 /// </summary>
 /// <param name="userIdAndRole"></param>
 /// <param name="checkUserWhoEdits"></param>
 /// <returns></returns>
 public Task <BaseApiResponse> RemoveRoleFromUserAsync(UserIdAndRole userIdAndRole, bool checkUserWhoEdits = true)
 {
     return(AddOrRemoveUserRoleAsync(userIdAndRole, false, checkUserWhoEdits));
 }
Exemple #3
0
 /// <summary>
 /// Добавить роль пользователю
 /// </summary>
 /// <param name="userIdAndRole"></param>
 /// <param name="checkUserWhoEdits"></param>
 /// <returns></returns>
 public Task <BaseApiResponse> AddUserToRoleAsync(UserIdAndRole userIdAndRole, bool checkUserWhoEdits)
 {
     return(AddOrRemoveUserRoleAsync(userIdAndRole, true, checkUserWhoEdits));
 }