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")));
            }
        }