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}\" удалена")); }
/// <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)); }
/// <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)); }