//[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));
        }
Exemple #2
0
        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)
            });
        }