예제 #1
0
        /// <summary>
        /// Adds permissions to a Role.
        /// </summary>
        public async Task <Role> AddPermissionsToRole(Role role, Guid[] permissionIds)
        {
            var permissionsToAdd = new List <Permission>();

            foreach (var permissionId in permissionIds)
            {
                var permission = await _permissionStore.Get(permissionId);

                if (permission.Grain == role.Grain && permission.SecurableItem == role.SecurableItem && role.Permissions.All(p => p.Id != permission.Id))
                {
                    permissionsToAdd.Add(permission);
                }
                else
                {
                    throw new IncompatiblePermissionException($"Permission with id {permission.Id} has the wrong grain, securableItem, or is already present on the role");
                }
            }

            foreach (var permission in permissionsToAdd)
            {
                role.Permissions.Add(permission);
            }

            await _roleStore.Update(role);

            return(role);
        }
        public async Task <Group> AddRoleToGroup(Group group, Role role)
        {
            group.Roles.Add(role);
            role.Groups.Add(group.Name);

            await _roleStore.Update(role);

            await Update(group);

            return(group);
        }
        public async Task <Group> AddRoleToGroup(string groupName, Guid roleId)
        {
            var group = await _groupStore.Get(groupName);

            var role = await _roleStore.Get(roleId);

            if (group.Roles.All(r => r.Id != roleId))
            {
                group.Roles.Add(role);
            }

            if (role.Groups.All(g => !string.Equals(g, groupName, StringComparison.OrdinalIgnoreCase)))
            {
                role.Groups.Add(groupName);
            }

            await _roleStore.Update(role);

            await _groupStore.Update(group);

            return(group);
        }
        public async Task <Role> UpdateRole(Role role)
        {
            try
            {
                await _roleStore.Update(role);

                return(role);
            }
            catch (NotFoundException <Role> e)
            {
                throw new NotFoundException <Role>(e.Message);
            }
        }
예제 #5
0
        public async Task <IActionResult> Edit(
            [FromRoute] string code,
            [FromBody] RoleUpdateForm form)
        {
            if (string.IsNullOrEmpty(code))
            {
                throw new ArgumentNullException(nameof(code));
            }

            if (!await RoleStore.IsExisting(code))
            {
                return(NotFound());
            }

            var validationResult =
                new RoleUpdateFormValidator(
                    RoleStore,
                    ResourceStore,
                    DisplayNameRule,
                    DescriptionRule)
                .Validate(form);

            validationResult.AddToModelState(this.ModelState, null);

            if (!validationResult.IsValid)
            {
                return(ValidationError());
            }

            Role role = await RoleStore.Get(code);

            role.DisplayName = form.DisplayName;
            role.Description = form.Description;
            role.Permissions = form.Permissions;

            await RoleStore.Update(role);

            var view = Element <Role>(role);

            return(AcceptedAtAction(nameof(GetByCode), new { role.Code }, view));
        }
예제 #6
0
파일: Role.cs 프로젝트: rhw1111/DCEM
 public async Task Update(Role role)
 {
     await _roleStore.Update(role);
 }