diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuResourceRequest.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuResourceRequest.java new file mode 100644 index 000000000..c27072da0 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/system/api/pojo/menu/SysMenuResourceRequest.java @@ -0,0 +1,51 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.system.api.pojo.menu; + +import cn.stylefeng.roses.kernel.rule.pojo.request.BaseRequest; +import cn.stylefeng.roses.kernel.scanner.api.annotation.field.ChineseDescription; +import lombok.Data; +import lombok.EqualsAndHashCode; + +import javax.validation.constraints.NotNull; + +/** + * 菜单资源的请求 + * + * @author fengshuonan + * @date 2021/8/8 22:40 + */ +@EqualsAndHashCode(callSuper = true) +@Data +public class SysMenuResourceRequest extends BaseRequest { + + /** + * 业务id不能为空 + */ + @NotNull(message = "业务id不能为空") + @ChineseDescription("业务id") + private Long businessId; + +} diff --git a/kernel-s-system/system-business-menu/pom.xml b/kernel-s-system/system-business-menu/pom.xml index 55f45990c..99e44d8b2 100644 --- a/kernel-s-system/system-business-menu/pom.xml +++ b/kernel-s-system/system-business-menu/pom.xml @@ -56,6 +56,13 @@ ${roses.version} + + + cn.stylefeng.roses + system-business-resource + ${roses.version} + + org.springframework.boot diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuResourceController.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuResourceController.java new file mode 100644 index 000000000..829d1d312 --- /dev/null +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/controller/SysMenuResourceController.java @@ -0,0 +1,65 @@ +/* + * Copyright [2020-2030] [https://www.stylefeng.cn] + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Guns采用APACHE LICENSE 2.0开源协议,您在使用过程中,需要注意以下几点: + * + * 1.请不要删除和修改根目录下的LICENSE文件。 + * 2.请不要删除和修改Guns源码头部的版权声明。 + * 3.请保留源码和相关描述文件的项目出处,作者声明等。 + * 4.分发源码时候,请注明软件出处 https://gitee.com/stylefeng/guns + * 5.在修改包名,模块名称,项目代码等时,请注明软件出处 https://gitee.com/stylefeng/guns + * 6.若您的项目无法满足以上几点,可申请商业授权 + */ +package cn.stylefeng.roses.kernel.system.modular.menu.controller; + +import cn.stylefeng.roses.kernel.rule.pojo.response.ResponseData; +import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; +import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; +import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; +import cn.stylefeng.roses.kernel.system.api.pojo.menu.SysMenuResourceRequest; +import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuResourceService; +import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; +import org.springframework.validation.annotation.Validated; +import org.springframework.web.bind.annotation.RestController; + +import javax.annotation.Resource; +import java.util.List; + +/** + * 菜单资源控制器 + * + * @author fengshuonan + * @date 2021/8/8 22:38 + */ +@RestController +@ApiResource(name = "菜单资源控制器") +public class SysMenuResourceController { + + @Resource + private SysMenuResourceService sysMenuResourceService; + + /** + * 获取菜单的资源分配列表 + * + * @author fengshuonan + * @date 2021/8/8 22:38 + */ + @GetResource(name = "获取菜单的资源分配列表", path = "/sysMenuResource/getMenuResourceList") + public ResponseData getMenuResourceList(@Validated SysMenuResourceRequest sysMenuResourceRequest) { + List menuResourceTree = sysMenuResourceService.getMenuResourceTree(sysMenuResourceRequest.getBusinessId()); + return new SuccessResponseData(menuResourceTree); + } + +} diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuResourceService.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuResourceService.java index 1b7fa5d42..9464e1e01 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuResourceService.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/SysMenuResourceService.java @@ -25,8 +25,11 @@ package cn.stylefeng.roses.kernel.system.modular.menu.service; import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenuResource; +import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; import com.baomidou.mybatisplus.extension.service.IService; +import java.util.List; + /** * 菜单资源信息 * @@ -35,5 +38,14 @@ import com.baomidou.mybatisplus.extension.service.IService; */ public interface SysMenuResourceService extends IService { + /** + * 获取菜单或菜单按钮绑定资源的树 + * + * @param businessId 业务id,菜单或按钮id + * @return 资源树列表 + * @author fengshuonan + * @date 2021/8/8 21:56 + */ + List getMenuResourceTree(Long businessId); } diff --git a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuResourceServiceImpl.java b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuResourceServiceImpl.java index 21e432c7e..d175a6727 100644 --- a/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuResourceServiceImpl.java +++ b/kernel-s-system/system-business-menu/src/main/java/cn/stylefeng/roses/kernel/system/modular/menu/service/impl/SysMenuResourceServiceImpl.java @@ -27,9 +27,16 @@ package cn.stylefeng.roses.kernel.system.modular.menu.service.impl; import cn.stylefeng.roses.kernel.system.modular.menu.entity.SysMenuResource; import cn.stylefeng.roses.kernel.system.modular.menu.mapper.SysMenuResourceMapper; import cn.stylefeng.roses.kernel.system.modular.menu.service.SysMenuResourceService; +import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; +import cn.stylefeng.roses.kernel.system.modular.resource.service.SysResourceService; +import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.List; +import java.util.stream.Collectors; + /** * 系统资源信息关联 * @@ -39,4 +46,17 @@ import org.springframework.stereotype.Service; @Service public class SysMenuResourceServiceImpl extends ServiceImpl implements SysMenuResourceService { + @Resource + private SysResourceService sysResourceService; + + @Override + public List getMenuResourceTree(Long businessId) { + LambdaQueryWrapper wrapper = new LambdaQueryWrapper<>(); + wrapper.eq(SysMenuResource::getBusinessId, businessId); + List list = this.list(wrapper); + + List resourceCodes = list.stream().map(SysMenuResource::getResourceCode).collect(Collectors.toList()); + return sysResourceService.getResourceList(resourceCodes, true); + } + } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/controller/ResourceController.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/controller/ResourceController.java index cc934cea1..0121f21a6 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/controller/ResourceController.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/controller/ResourceController.java @@ -31,7 +31,6 @@ import cn.stylefeng.roses.kernel.rule.pojo.response.SuccessResponseData; import cn.stylefeng.roses.kernel.scanner.api.annotation.ApiResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.GetResource; import cn.stylefeng.roses.kernel.scanner.api.annotation.PostResource; -import cn.stylefeng.roses.kernel.system.api.pojo.resource.ApiGroupRequest; import cn.stylefeng.roses.kernel.system.api.pojo.resource.ExternalResourceRequest; import cn.stylefeng.roses.kernel.system.api.pojo.resource.ResourceRequest; import cn.stylefeng.roses.kernel.system.api.pojo.role.request.SysRoleRequest; @@ -39,7 +38,6 @@ import cn.stylefeng.roses.kernel.system.modular.resource.entity.SysResource; import cn.stylefeng.roses.kernel.system.modular.resource.pojo.ResourceTreeNode; import cn.stylefeng.roses.kernel.system.modular.resource.service.SysResourceService; import com.alibaba.fastjson.JSON; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RestController; @@ -92,7 +90,7 @@ public class ResourceController { */ @GetResource(name = "Layui版本--获取资源树列表,用于角色分配接口权限", path = "/resource/getRoleResourceTree", responseClass = ResourceTreeNode.class) public List getLateralTree(SysRoleRequest sysRoleRequest) { - return sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), false); + return sysResourceService.getRoleResourceTree(sysRoleRequest.getRoleId(), false); } /** @@ -103,7 +101,7 @@ public class ResourceController { */ @GetResource(name = "AntdVue版本--获取资源树列表,用于角色分配接口权限", path = "/resource/getRoleResourceTreeAntdv", responseClass = ResourceTreeNode.class) public ResponseData getLateralTreeChildren(SysRoleRequest sysRoleRequest) { - List resourceLateralTree = sysResourceService.getResourceTree(sysRoleRequest.getRoleId(), true); + List resourceLateralTree = sysResourceService.getRoleResourceTree(sysRoleRequest.getRoleId(), true); return new SuccessResponseData(resourceLateralTree); } diff --git a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/SysResourceService.java b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/SysResourceService.java index e8074e697..47e233bdb 100644 --- a/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/SysResourceService.java +++ b/kernel-s-system/system-business-resource/src/main/java/cn/stylefeng/roses/kernel/system/modular/resource/service/SysResourceService.java @@ -66,14 +66,24 @@ public interface SysResourceService extends IService { List findList(ResourceRequest resourceRequest); /** - * 获取资源平级树列表,用于分配接口权限 + * 获取角色绑定的资源树列表,用于分配接口权限 * * @param roleId 角色id * @param treeBuildFlag true-带树形结构,false-不组装树形结构的 * @author majianguo * @date 2021/1/9 15:08 */ - List getResourceTree(Long roleId, Boolean treeBuildFlag); + List getRoleResourceTree(Long roleId, Boolean treeBuildFlag); + + /** + * 获取资源绑定列表(业务通用) + * + * @param resourceCodes 业务已经绑定的资源的编码集合 + * @param treeBuildFlag 是否要构建成树 + * @author fengshuonan + * @date 2021/8/8 22:24 + */ + List getResourceList(List resourceCodes, Boolean treeBuildFlag); /** * 获取资源树列表,用于生成api接口 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 f3991bbb7..3cc26c73f 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 @@ -111,8 +111,22 @@ public class SysResourceServiceImpl extends ServiceImpl getResourceTree(Long roleId, Boolean treeBuildFlag) { + public List getRoleResourceTree(Long roleId, Boolean treeBuildFlag) { + // 查询当前角色已有的接口 + List resourceList = roleServiceApi.getRoleResourceList(Collections.singletonList(roleId)); + + // 该角色已拥有权限 + List alreadyList = new ArrayList<>(); + for (SysRoleResourceDTO sysRoleResponse : resourceList) { + alreadyList.add(sysRoleResponse.getResourceCode()); + } + + return this.getResourceList(alreadyList, treeBuildFlag); + } + + @Override + public List getResourceList(List resourceCodes, Boolean treeBuildFlag) { List res = new ArrayList<>(); // 获取所有的资源 @@ -134,15 +148,6 @@ public class SysResourceServiceImpl extends ServiceImpl allResource = this.list(sysResourceLambdaQueryWrapper); - // 查询当前角色已有的接口 - List resourceList = roleServiceApi.getRoleResourceList(Collections.singletonList(roleId)); - - // 该角色已拥有权限 - Map alreadyHave = new HashMap<>(resourceList.size()); - for (SysRoleResourceDTO sysRoleResponse : resourceList) { - alreadyHave.put(sysRoleResponse.getResourceCode(), sysRoleResponse); - } - // 根据模块名称把资源分类 Map> modularMap = new HashMap<>(); for (SysResource sysResource : allResource) { @@ -170,8 +175,7 @@ public class SysResourceServiceImpl extends ServiceImpl allResource = this.list(sysResourceLambdaQueryWrapper);