diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/ResourceServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/ResourceServiceApi.java index 2b76b2499..34fcae655 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/ResourceServiceApi.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/ResourceServiceApi.java @@ -24,9 +24,11 @@ */ package cn.stylefeng.roses.kernel.system.api; +import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceDefinition; import cn.stylefeng.roses.kernel.scanner.api.pojo.resource.ResourceUrlParam; +import java.util.List; import java.util.Set; /** @@ -65,4 +67,14 @@ public interface ResourceServiceApi { */ Integer getResourceCount(); + /** + * 根据业务类型,获取所有的资源 + * + * @param resBizTypeEnum 资源类型 + * @return 所有资源的编码集合 + * @author fengshuonan + * @date 2022/9/29 14:27 + */ + List getTotalResourceCode(ResBizTypeEnum resBizTypeEnum); + } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java index d31b3bae5..871ad54ca 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/impl/SysResourceServiceImpl.java @@ -39,6 +39,7 @@ import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; import cn.stylefeng.roses.kernel.rule.constants.TreeConstants; import cn.stylefeng.roses.kernel.rule.enums.DbTypeEnum; +import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; import cn.stylefeng.roses.kernel.rule.tree.factory.DefaultTreeBuildFactory; import cn.stylefeng.roses.kernel.scanner.api.ResourceReportApi; @@ -137,8 +138,8 @@ public class SysResourceServiceImpl extends ServiceImpl sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>(); - sysResourceLambdaQueryWrapper.select(SysResource::getAppCode, SysResource::getModularCode, SysResource::getModularName, SysResource::getResourceCode, - SysResource::getUrl, SysResource::getResourceName); + sysResourceLambdaQueryWrapper.select(SysResource::getAppCode, SysResource::getModularCode, SysResource::getModularName, SysResource::getResourceCode, SysResource::getUrl, + SysResource::getResourceName); // 只查询需要授权的接口 sysResourceLambdaQueryWrapper.eq(SysResource::getRequiredPermissionFlag, YesOrNotEnum.Y.getCode()); @@ -149,8 +150,7 @@ public class SysResourceServiceImpl extends ServiceImpl roleIds = loginUserApi.getLoginUser().getSimpleRoleInfoList().parallelStream().map(SimpleRoleInfo::getRoleId) - .collect(Collectors.toList()); + List roleIds = loginUserApi.getLoginUser().getSimpleRoleInfoList().parallelStream().map(SimpleRoleInfo::getRoleId).collect(Collectors.toList()); Set resourceCodeList = roleServiceApi.getRoleResourceCodeList(roleIds); if (!resourceCodeList.isEmpty()) { sysResourceLambdaQueryWrapper.in(SysResource::getResourceCode, resourceCodeList); @@ -234,13 +234,12 @@ public class SysResourceServiceImpl extends ServiceImpl sysResourceLambdaQueryWrapper = new LambdaQueryWrapper<>(); sysResourceLambdaQueryWrapper.eq(SysResource::getViewFlag, YesOrNotEnum.N.getCode()); - sysResourceLambdaQueryWrapper.select(SysResource::getAppCode, SysResource::getModularCode, SysResource::getModularName, SysResource::getResourceCode, - SysResource::getUrl, SysResource::getResourceName); + sysResourceLambdaQueryWrapper.select(SysResource::getAppCode, SysResource::getModularCode, SysResource::getModularName, SysResource::getResourceCode, SysResource::getUrl, + SysResource::getResourceName); // 查询条件 if (ObjectUtil.isNotEmpty(resourceRequest.getResourceName())) { - sysResourceLambdaQueryWrapper.like(SysResource::getUrl, resourceRequest.getResourceName()).or() - .like(SysResource::getResourceName, resourceRequest.getResourceName()); + sysResourceLambdaQueryWrapper.like(SysResource::getUrl, resourceRequest.getResourceName()).or().like(SysResource::getResourceName, resourceRequest.getResourceName()); } List allResource = this.list(sysResourceLambdaQueryWrapper); @@ -401,6 +400,19 @@ public class SysResourceServiceImpl extends ServiceImpl getTotalResourceCode(ResBizTypeEnum resBizTypeEnum) { + + LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); + queryWrapper.select(SysResource::getResourceCode); + + // 根据资源类型查询 + queryWrapper.eq(ObjectUtil.isNotEmpty(resBizTypeEnum), SysResource::getResourceBizType, resBizTypeEnum.getCode()); + + List list = this.list(queryWrapper); + return list.stream().map(SysResource::getResourceCode).collect(Collectors.toList()); + } + /** * 创建wrapper * @@ -488,8 +500,7 @@ public class SysResourceServiceImpl extends ServiceImpl createResourceTree(Map>> appModularResources, Map modularCodeName) { + private List createResourceTree(Map>> appModularResources, Map modularCodeName) { List finalTree = new ArrayList<>(); diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleAuthController.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleAuthController.java index 5971ca388..31c83a2b9 100644 --- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleAuthController.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/controller/SysRoleAuthController.java @@ -142,4 +142,16 @@ public class SysRoleAuthController { return new SuccessResponseData<>(); } + /** + * 角色绑定所有接口数据 + * + * @author fengshuonan + * @date 2021/8/10 18:23 + */ + @PostResource(name = "角色绑定所有接口数据", path = "/sysRole/grantResourceV2/grantAll") + public ResponseData grantResourceV2GrantAll(@RequestBody @Validated(SysRoleRequest.grantAll.class) SysRoleRequest sysRoleRequest) { + sysRoleResourceService.grantResourceV2GrantAll(sysRoleRequest); + return new SuccessResponseData<>(); + } + } diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleResourceService.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleResourceService.java index cb129d900..82e3a650e 100644 --- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleResourceService.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/SysRoleResourceService.java @@ -81,4 +81,12 @@ public interface SysRoleResourceService extends IService { */ void quickSaveAll(List sysRoleResourceList); + /** + * 角色绑定所有资源 + * + * @author fengshuonan + * @date 2022/9/29 14:05 + */ + void grantResourceV2GrantAll(SysRoleRequest sysRoleRequest); + } diff --git a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleResourceServiceImpl.java b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleResourceServiceImpl.java index 2d1be1f9e..3573af066 100644 --- a/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleResourceServiceImpl.java +++ b/kernel-s-system/system-business-role/src/main/java/cn/stylefeng/roses/kernel/system/modular/role/service/impl/SysRoleResourceServiceImpl.java @@ -30,6 +30,8 @@ import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.db.api.context.DbOperatorContext; import cn.stylefeng.roses.kernel.rule.constants.RuleConstants; import cn.stylefeng.roses.kernel.rule.enums.DbTypeEnum; +import cn.stylefeng.roses.kernel.rule.enums.ResBizTypeEnum; +import cn.stylefeng.roses.kernel.system.api.ResourceServiceApi; import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest; import cn.stylefeng.roses.kernel.system.modular.role.entity.SysRoleResource; import cn.stylefeng.roses.kernel.system.modular.role.mapper.SysRoleResourceMapper; @@ -57,6 +59,9 @@ public class SysRoleResourceServiceImpl extends ServiceImpl> roleResourceCacheApi; + @Resource + private ResourceServiceApi resourceServiceApi; + @Override @Transactional(rollbackFor = Exception.class) public void grantResource(SysRoleRequest sysRoleRequest) { @@ -73,16 +78,7 @@ public class SysRoleResourceServiceImpl extends ServiceImpl grantResourceList = sysRoleRequest.getGrantResourceList(); - ArrayList sysRoleResources = new ArrayList<>(); - - // 批量保存角色授权资源 - for (String resourceId : grantResourceList) { - SysRoleResource sysRoleMenu = new SysRoleResource(); - sysRoleMenu.setRoleId(roleId); - sysRoleMenu.setResourceCode(resourceId); - sysRoleResources.add(sysRoleMenu); - } - this.saveBatch(sysRoleResources); + this.batchSaveResCodes(roleId, grantResourceList); } @Override @@ -161,4 +157,44 @@ public class SysRoleResourceServiceImpl extends ServiceImpl totalResourceCode = resourceServiceApi.getTotalResourceCode(resBizTypeEnum); + this.batchSaveResCodes(sysRoleRequest.getRoleId(), totalResourceCode); + } + + /** + * 批量保存角色和资源的绑定 + * + * @author fengshuonan + * @date 2022/9/29 14:34 + */ + private void batchSaveResCodes(Long roleId, List totalResourceCode) { + ArrayList sysRoleResourceList = new ArrayList<>(); + + if (ObjectUtil.isNotEmpty(totalResourceCode)) { + for (String resCode : totalResourceCode) { + SysRoleResource sysRoleResource = new SysRoleResource(); + sysRoleResource.setRoleId(roleId); + sysRoleResource.setResourceCode(resCode); + sysRoleResourceList.add(sysRoleResource); + } + this.saveBatch(sysRoleResourceList); + } + } + }