Exemplo n.º 1
0
        /// <summary>
        /// 重新添加权限到角色
        /// </summary>
        /// <param name="dto"></param>
        /// <returns></returns>
        public async Task <Result> ReAddPermissonsToRoleAsync(ReAddPermissonsToRoleDto dto)
        {
            if (dto is null)
            {
                throw new ArgumentNullException(nameof(dto));
            }

            var existRole = await applicationDbContext.Roles.AnyAsync(e => e.Id == dto.RoleId).ConfigureAwait(false);

            if (!existRole)
            {
                return(FailedResult("角色不存在"));
            }

            dto.PermissonIds = dto.PermissonIds.Distinct().ToList();

            //先清空清空rolePermissions 即可
            var rolePermissons = applicationDbContext.RolePermissons
                                 .Where(e => e.RoleId == dto.RoleId);

            applicationDbContext.RolePermissons.RemoveRange(rolePermissons);


            //再添加到rolePermissions表
            foreach (var permissionId in dto.PermissonIds)
            {
                var existPermisson = await applicationDbContext.Permissons.AnyAsync(e => e.Id == permissionId).ConfigureAwait(false);

                if (!existPermisson)
                {
                    return(FailedResult($"不存在权限id[{permissionId}]"));
                }

                await applicationDbContext.RolePermissons.AddAsync(new RolePermisson
                {
                    RoleId      = dto.RoleId,
                    PermissonId = permissionId
                }).ConfigureAwait(false);
            }

            try
            {
                await applicationDbContext.SaveChangesAsync().ConfigureAwait(false);

                return(OkResult());
            }
            catch (DbUpdateException ex)
            {
                return(FailedResult(ex));
            }
        }
        public async Task <IActionResult> ReAddPermissonsToRoleAsync(string roleId, ReAddPermissonsToRoleDto dto)
        {
            if (roleId != dto.RoleId)
            {
                ModelState.AddModelError(string.Empty, "roleId参数不一致");
            }
            var result = await roleService.ReAddPermissonsToRoleAsync(dto).ConfigureAwait(false);

            if (result.Succeeded)
            {
                return(Ok());
            }

            ModelState.AddModelError(string.Empty, result.ErrorMessage);
            return(BadRequest(ModelState));
        }