public async Task <JsonResult> OnPostCreateManagement([DataSourceRequest] DataSourceRequest request, ManagementViewModel managementVm) { try { await Task.Run(async() => { // Получаем юзера из списка var user = _users.First(m => { var fullName = $"{m.FirstName} {m.LastName}"; return(fullName == managementVm.User.FullNameUser); }); // Получаем пермишн из списка var permission = _permissions.First(m => m.Name == managementVm.Permission.Name); // Добавляем новый элемент в список для отображения _management.Add(new ManagementViewModel { Id = Guid.NewGuid().ToString(), Guid = Guid.NewGuid().ToString(), User = user, Permission = permission }); // Проверяем на наличие такого же заданного разрешения var permsForUser = await _permissionsService.GetPermissionsForUserAsync(user.UserId); // Если такого нет, даём разрешения if (permsForUser == null || !permsForUser.Any(p => p.PermissionId == permission.PermissionId)) { // Даём разрешение в mongodb await _permissionsService.AssignPermissionAsync(permission.PermissionId, user.UserId); // Фиксируем разрешение для юзера в локальной базе await _uow.BindingEntities.AddAsync(new BindingEntity { UserId = user.UserId, PermissionId = permission.PermissionId }); await _uow.SaveChangesAsync(); // Обновляем в списке для отображения _users.Remove(user); user.Permissions = user.Permissions.TrimEnd() + $", {permission.Name}"; _users.Add(user); } }); } catch (Exception e) { _logger.LogWarning($"--- OnPostCreateManagement something wrong.\n\n Reason: {e.Message}"); _logger.LogDebug(3000, e, "------------------------------------------------------"); } return(new JsonResult(new[] { managementVm }.ToDataSourceResult(request, ModelState))); }