From 2007a080319b4c6bf94349fac64111fb771c3e71 Mon Sep 17 00:00:00 2001 From: fengshuonan Date: Fri, 8 Sep 2023 14:19:09 +0800 Subject: [PATCH] =?UTF-8?q?=E3=80=908.0=E3=80=91=E3=80=90sys=E3=80=91?= =?UTF-8?q?=E3=80=90role=E3=80=91=E6=9B=B4=E6=96=B0=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E7=BB=91=E5=AE=9A=E6=9D=83=E9=99=90=E9=99=90=E5=88=B6=E7=9A=84?= =?UTF-8?q?=E4=B8=A4=E4=B8=AA=E6=8E=A5=E5=8F=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../role/action/RoleBindLimitAction.java | 30 +++++ .../controller/SysRoleLimitController.java | 8 +- .../role/service/SysRoleLimitService.java | 62 ++-------- .../service/impl/SysRoleLimitServiceImpl.java | 113 +++++++----------- 4 files changed, 86 insertions(+), 127 deletions(-) create mode 100644 kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/action/RoleBindLimitAction.java diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/action/RoleBindLimitAction.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/action/RoleBindLimitAction.java new file mode 100644 index 000000000..2ea072941 --- /dev/null +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/action/RoleBindLimitAction.java @@ -0,0 +1,30 @@ +package cn.stylefeng.roses.kernel.sys.modular.role.action; + +import cn.stylefeng.roses.kernel.sys.modular.role.enums.PermissionNodeTypeEnum; +import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest; + +/** + * 角色绑定权限限制的接口 + * + * @author fengshuonan + * @since 2023/9/8 14:15 + */ +public interface RoleBindLimitAction { + + /** + * 获取操作的类型,有4种节点类型 + * + * @author fengshuonan + * @since 2023/9/8 14:15 + */ + PermissionNodeTypeEnum getRoleBindLimitNodeType(); + + /** + * 进行角色绑定权限限制的过程,执行绑定的操作 + * + * @author fengshuonan + * @since 2023/9/8 14:16 + */ + void doRoleBindLimitAction(RoleBindPermissionRequest roleBindPermissionRequest); + +} diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/controller/SysRoleLimitController.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/controller/SysRoleLimitController.java index 7f0b39961..5ed0713f5 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/controller/SysRoleLimitController.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/controller/SysRoleLimitController.java @@ -41,9 +41,8 @@ public class SysRoleLimitController { requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT) public ResponseData getRoleBindLimit( @Validated(BaseRequest.detail.class) RoleBindPermissionRequest roleBindPermissionRequest) { - - - return new SuccessResponseData<>(); + RoleBindPermissionResponse roleLimit = sysRoleLimitService.getRoleLimit(roleBindPermissionRequest); + return new SuccessResponseData<>(roleLimit); } /** @@ -56,8 +55,7 @@ public class SysRoleLimitController { requirePermissionCode = PermissionCodeConstants.CHANGE_ROLE_BIND_LIMIT) public ResponseData bindRoleLimit(@RequestBody @Validated(RoleBindPermissionRequest.roleBindPermission.class) RoleBindPermissionRequest roleBindPermissionRequest) { - - + sysRoleLimitService.updateRoleBindLimit(roleBindPermissionRequest); return new SuccessResponseData<>(); } diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/SysRoleLimitService.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/SysRoleLimitService.java index 8a72b04d9..84786cb71 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/SysRoleLimitService.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/SysRoleLimitService.java @@ -1,12 +1,10 @@ package cn.stylefeng.roses.kernel.sys.modular.role.service; -import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit; -import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleLimitRequest; +import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest; +import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse; import com.baomidou.mybatisplus.extension.service.IService; -import java.util.List; - /** * 角色权限限制 服务类 * @@ -15,60 +13,20 @@ import java.util.List; */ public interface SysRoleLimitService extends IService { - /** - * 新增 + /** + * 获取角色绑定的权限限制列表 * - * @param sysRoleLimitRequest 请求参数 * @author fengshuonan - * @date 2023/09/08 12:55 + * @since 2023/9/8 13:50 */ - void add(SysRoleLimitRequest sysRoleLimitRequest); + RoleBindPermissionResponse getRoleLimit(RoleBindPermissionRequest roleBindPermissionRequest); - /** - * 删除 + /** + * 更新角色下绑定的权限限制 * - * @param sysRoleLimitRequest 请求参数 * @author fengshuonan - * @date 2023/09/08 12:55 + * @since 2023/9/8 14:06 */ - void del(SysRoleLimitRequest sysRoleLimitRequest); - - /** - * 编辑 - * - * @param sysRoleLimitRequest 请求参数 - * @author fengshuonan - * @date 2023/09/08 12:55 - */ - void edit(SysRoleLimitRequest sysRoleLimitRequest); - - /** - * 查询详情 - * - * @param sysRoleLimitRequest 请求参数 - * @author fengshuonan - * @date 2023/09/08 12:55 - */ - SysRoleLimit detail(SysRoleLimitRequest sysRoleLimitRequest); - - /** - * 获取列表 - * - * @param sysRoleLimitRequest 请求参数 - * @return List 返回结果 - * @author fengshuonan - * @date 2023/09/08 12:55 - */ - List findList(SysRoleLimitRequest sysRoleLimitRequest); - - /** - * 获取列表(带分页) - * - * @param sysRoleLimitRequest 请求参数 - * @return PageResult 返回结果 - * @author fengshuonan - * @date 2023/09/08 12:55 - */ - PageResult findPage(SysRoleLimitRequest sysRoleLimitRequest); + void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest); } \ No newline at end of file diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleLimitServiceImpl.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleLimitServiceImpl.java index d084c5d84..9080a33af 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleLimitServiceImpl.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleLimitServiceImpl.java @@ -1,22 +1,25 @@ package cn.stylefeng.roses.kernel.sys.modular.role.service.impl; -import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.util.ObjectUtil; -import cn.stylefeng.roses.kernel.db.api.factory.PageFactory; -import cn.stylefeng.roses.kernel.db.api.factory.PageResultFactory; -import cn.stylefeng.roses.kernel.db.api.pojo.page.PageResult; -import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; +import cn.hutool.extra.spring.SpringUtil; +import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleBindLimitAction; import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit; -import cn.stylefeng.roses.kernel.sys.modular.role.enums.SysRoleLimitExceptionEnum; +import cn.stylefeng.roses.kernel.sys.modular.role.factory.PermissionAssignFactory; import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleLimitMapper; -import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleLimitRequest; +import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.RoleBindPermissionRequest; +import cn.stylefeng.roses.kernel.sys.modular.role.pojo.response.RoleBindPermissionResponse; +import cn.stylefeng.roses.kernel.sys.modular.role.service.PermissionAssignService; import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleLimitService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; -import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import org.springframework.stereotype.Service; +import javax.annotation.Resource; +import java.util.HashSet; import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.stream.Collectors; /** * 角色权限限制业务实现层 @@ -27,78 +30,48 @@ import java.util.List; @Service public class SysRoleLimitServiceImpl extends ServiceImpl implements SysRoleLimitService { - @Override - public void add(SysRoleLimitRequest sysRoleLimitRequest) { - SysRoleLimit sysRoleLimit = new SysRoleLimit(); - BeanUtil.copyProperties(sysRoleLimitRequest, sysRoleLimit); - this.save(sysRoleLimit); + @Resource + private PermissionAssignService permissionAssignService; + + @Override + public RoleBindPermissionResponse getRoleLimit(RoleBindPermissionRequest roleBindPermissionRequest) { + + // 1. 整理出来一个总的相应的结构树,选择状态为空 + RoleBindPermissionResponse selectTreeStructure = permissionAssignService.createSelectTreeStructure(); + + // 2. 获取角色限制所对应的菜单和功能列表 + Set roleBindLimitList = this.getRoleBindLimitList(roleBindPermissionRequest.getRoleId()); + + // 3. 组合结构和角色绑定的限制信息,填充选择状态,封装返回结果 + return PermissionAssignFactory.fillCheckedFlag(selectTreeStructure, roleBindLimitList); } @Override - public void del(SysRoleLimitRequest sysRoleLimitRequest) { - SysRoleLimit sysRoleLimit = this.querySysRoleLimit(sysRoleLimitRequest); - this.removeById(sysRoleLimit.getRoleLimitId()); - } - - @Override - public void edit(SysRoleLimitRequest sysRoleLimitRequest) { - SysRoleLimit sysRoleLimit = this.querySysRoleLimit(sysRoleLimitRequest); - BeanUtil.copyProperties(sysRoleLimitRequest, sysRoleLimit); - this.updateById(sysRoleLimit); - } - - @Override - public SysRoleLimit detail(SysRoleLimitRequest sysRoleLimitRequest) { - return this.querySysRoleLimit(sysRoleLimitRequest); - } - - @Override - public PageResult findPage(SysRoleLimitRequest sysRoleLimitRequest) { - LambdaQueryWrapper wrapper = createWrapper(sysRoleLimitRequest); - Page sysRolePage = this.page(PageFactory.defaultPage(), wrapper); - return PageResultFactory.createPageResult(sysRolePage); - } - - @Override - public List findList(SysRoleLimitRequest sysRoleLimitRequest) { - LambdaQueryWrapper wrapper = this.createWrapper(sysRoleLimitRequest); - return this.list(wrapper); - } - - /** - * 获取信息 - * - * @author fengshuonan - * @date 2023/09/08 12:55 - */ - private SysRoleLimit querySysRoleLimit(SysRoleLimitRequest sysRoleLimitRequest) { - SysRoleLimit sysRoleLimit = this.getById(sysRoleLimitRequest.getRoleLimitId()); - if (ObjectUtil.isEmpty(sysRoleLimit)) { - throw new ServiceException(SysRoleLimitExceptionEnum.SYS_ROLE_LIMIT_NOT_EXISTED); + public void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest) { + Map operateActionMap = SpringUtil.getBeansOfType(RoleBindLimitAction.class); + for (RoleBindLimitAction roleBindLimitAction : operateActionMap.values()) { + if (roleBindLimitAction.getRoleBindLimitNodeType().getCode().equals(roleBindPermissionRequest.getPermissionNodeType())) { + roleBindLimitAction.doRoleBindLimitAction(roleBindPermissionRequest); + return; + } } - return sysRoleLimit; } /** - * 创建查询wrapper + * 获取角色绑定的限制列表(包含限制的菜单id和限制的菜单功能id) * * @author fengshuonan - * @date 2023/09/08 12:55 + * @since 2023/9/8 13:55 */ - private LambdaQueryWrapper createWrapper(SysRoleLimitRequest sysRoleLimitRequest) { - LambdaQueryWrapper queryWrapper = new LambdaQueryWrapper<>(); - - Long roleLimitId = sysRoleLimitRequest.getRoleLimitId(); - Long roleId = sysRoleLimitRequest.getRoleId(); - Integer limitType = sysRoleLimitRequest.getLimitType(); - Long businessId = sysRoleLimitRequest.getBusinessId(); - - queryWrapper.eq(ObjectUtil.isNotNull(roleLimitId), SysRoleLimit::getRoleLimitId, roleLimitId); - queryWrapper.eq(ObjectUtil.isNotNull(roleId), SysRoleLimit::getRoleId, roleId); - queryWrapper.eq(ObjectUtil.isNotNull(limitType), SysRoleLimit::getLimitType, limitType); - queryWrapper.eq(ObjectUtil.isNotNull(businessId), SysRoleLimit::getBusinessId, businessId); - - return queryWrapper; + private Set getRoleBindLimitList(Long roleId) { + LambdaQueryWrapper sysRoleLimitLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysRoleLimitLambdaQueryWrapper.select(SysRoleLimit::getBusinessId); + sysRoleLimitLambdaQueryWrapper.eq(SysRoleLimit::getRoleId, roleId); + List sysRoleMenuList = this.list(sysRoleLimitLambdaQueryWrapper); + if (ObjectUtil.isEmpty(sysRoleMenuList)) { + return new HashSet<>(); + } + return sysRoleMenuList.stream().map(SysRoleLimit::getBusinessId).collect(Collectors.toSet()); } } \ No newline at end of file