//[HasPermission(typeof(AttributeRequirement<CanAdminUsergroupsRequirement>))] public Task <ActionResult <UserGroupListItem> > PutPermissions([FromForm] int key, [FromForm] string values) { var request = new UserGroupUpdatePermissionsRequest(); JsonConvert.PopulateObject(values, request); return(this._userGroupService.UpdatePermissions(key, request).Convert <UserGroupListItem>(this)); }
public async Task <IWrappedResponse <UserGroupListItem> > UpdatePermissions(int groupId, UserGroupUpdatePermissionsRequest request) { var userGroup = _userGroupRepo.FindAll().IgnoreQueryFilters() .Include(i => i.Permissions) .Include(i => i.Users) .SingleOrDefault(g => g.Id == groupId && !g.IsDeleted); if (userGroup == null) { return new WrappedResponse <UserGroupListItem>() { ResultType = ResultType.NotFound, Data = null, Errors = new[] { $"There was no Group with the id: {groupId}" } } } ; if (request.GroupName != null && userGroup.Name != request.GroupName) { userGroup.Name = request.GroupName; } // Remove Permissions witch are not in the List anymore var existingPermissions = userGroup.Permissions; //List<Olma.Permission> permissionsToRemove = new List<Olma.Permission>(); foreach (var existingPermission in existingPermissions.ToList()) { if (!request.Permissions.Exists(p => p.Action == existingPermission.Action && p.Resource == existingPermission.Resource && p.ReferenceId == existingPermission.ReferenceId) ) { userGroup.Permissions.Remove(existingPermission); } } // Add new Permissions foreach (var permission in request.Permissions.ToList()) { if (!existingPermissions.Any(e => e.Action == permission.Action && e.Resource == permission.Resource && e.ReferenceId == permission.ReferenceId) ) { var newPermission = new Olma.Permission() { Action = permission.Action, Type = Olma.PermissionType.Allow, Scope = Olma.PermissionScope.Group, Resource = permission.Resource, ReferenceId = permission.ReferenceId }; userGroup.Permissions.Add(newPermission); } } try { _userGroupRepo.Save(); // Möglicher ungültiger Permission Cache await _permissionsService.UpdateCache(); } catch (Exception e) { Console.WriteLine(e); throw; } return(new WrappedResponse <UserGroupListItem>() { ResultType = ResultType.Updated, Data = Mapper.Map <Olma.UserGroup, UserGroupListItem>(userGroup) }); }