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);