public async Task <OperationResult> UpdateSecurityGroup([FromBody] PermissionsUpdateModel model) { return(await _permissionsService.UpdatePermissions(model)); }
public async Task <OperationResult> UpdatePermissions(PermissionsUpdateModel requestModel) { try { if (!await _dbContext.SecurityGroups.AnyAsync(x => x.Id == requestModel.GroupId)) { return(new OperationDataResult <PermissionsModel>(false, _localizationService.GetString("SecurityGroupNotFound"))); } //using (var transaction = await _dbContext.Database.BeginTransactionAsync()) // { var enabledList = requestModel.Permissions .Where(x => x.IsEnabled) .Select(x => x.Id) .ToList(); // for delete var forDelete = _dbContext.GroupPermissions .Where(x => x.SecurityGroupId == requestModel.GroupId) .Where(x => !enabledList.Contains(x.Permission.Id)); _dbContext.GroupPermissions.RemoveRange(forDelete); await _dbContext.SaveChangesAsync(); var list = _dbContext.GroupPermissions .Where(x => x.SecurityGroupId == requestModel.GroupId) .Where(x => enabledList.Contains(x.Permission.Id)) .Select(x => x.Permission.Id) .ToList(); foreach (var permissionId in enabledList) { if (!list.Contains(permissionId)) { await _dbContext.GroupPermissions.AddAsync(new GroupPermission() { PermissionId = permissionId, SecurityGroupId = requestModel.GroupId }); } } await _dbContext.SaveChangesAsync(); // Update claims in memory store await _claimsService.UpdateAuthenticatedUsers(new List <int> { requestModel.GroupId }); //transaction.Commit(); // } return(new OperationResult(true, _localizationService.GetString("PermissionsUpdatedSuccessfully"))); } catch (Exception e) { _logger.LogError(e.Message); return(new OperationResult(false, _localizationService.GetString("ErrorWhileUpdatingPermissions"))); } }