diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysRoleLimitServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysRoleLimitServiceApi.java new file mode 100644 index 000000000..c28dc5130 --- /dev/null +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysRoleLimitServiceApi.java @@ -0,0 +1,30 @@ +package cn.stylefeng.roses.kernel.sys.api; + +import java.util.List; +import java.util.Set; + +/** + * 获取角色的权限列表 + * + * @author fengshuonan + * @since 2023/9/8 21:43 + */ +public interface SysRoleLimitServiceApi { + + /** + * 获取角色的限制列表(包含菜单id和菜单功能id) + * + * @author fengshuonan + * @since 2023/9/8 14:19 + */ + Set getRoleBindLimitList(Long roleId); + + /** + * 获取角色的限制列表(包含菜单id和菜单功能id) + * + * @author fengshuonan + * @since 2023/9/8 14:19 + */ + Set getRoleBindLimitList(List roleIdList); + +} diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysUserRoleServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysUserRoleServiceApi.java index fb21098bc..30b56a40e 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysUserRoleServiceApi.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysUserRoleServiceApi.java @@ -1,6 +1,7 @@ package cn.stylefeng.roses.kernel.sys.api; import java.util.List; +import java.util.Set; /** * 单独编写用户角色关联关系的Api @@ -26,4 +27,21 @@ public interface SysUserRoleServiceApi { */ List findUserIdsByRoleId(Long roleId); + /** + * 获取用户的角色范围列表,角色范围指用户的角色可分配的权限列表 + * + * @param userId 用户id + * @author fengshuonan + * @since 2023/9/8 21:41 + */ + Set findUserRoleLimitScope(Long userId); + + /** + * 获取当前登录用户的角色范围列表,角色范围指用户的角色可分配的权限列表 + * + * @author fengshuonan + * @since 2023/9/8 21:41 + */ + Set findCurrentUserRoleLimitScope(); + } diff --git a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java index edf4af8f9..e89856322 100644 --- a/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java +++ b/kernel-s-system/system-business-hr/src/main/java/cn/stylefeng/roses/kernel/sys/modular/user/service/impl/SysUserRoleServiceImpl.java @@ -1,9 +1,11 @@ package cn.stylefeng.roses.kernel.sys.modular.user.service.impl; import cn.hutool.core.util.ObjectUtil; +import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.cache.api.CacheOperatorApi; import cn.stylefeng.roses.kernel.event.sdk.publish.BusinessEventPublisher; import cn.stylefeng.roses.kernel.rule.exception.base.ServiceException; +import cn.stylefeng.roses.kernel.sys.api.SysRoleLimitServiceApi; import cn.stylefeng.roses.kernel.sys.api.SysRoleServiceApi; import cn.stylefeng.roses.kernel.sys.api.callback.RemoveRoleCallbackApi; import cn.stylefeng.roses.kernel.sys.api.callback.RemoveUserCallbackApi; @@ -46,6 +48,9 @@ public class SysUserRoleServiceImpl extends ServiceImpl> userRoleCache; + @Resource + private SysRoleLimitServiceApi sysRoleLimitServiceApi; + @Override @Transactional(rollbackFor = Exception.class) public void bindRoles(SysUserRoleRequest sysUserRoleRequest) { @@ -155,6 +160,24 @@ public class SysUserRoleServiceImpl extends ServiceImpl findUserRoleLimitScope(Long userId) { + + // 获取用户的所有角色id + List userRoleIdList = this.getUserRoleIdList(userId); + + // 获取角色的限制范围列表(菜单和菜单功能id集合) + return this.sysRoleLimitServiceApi.getRoleBindLimitList(userRoleIdList); + } + + @Override + public Set findCurrentUserRoleLimitScope() { + + Long userId = LoginContext.me().getLoginUser().getUserId(); + + return this.findUserRoleLimitScope(userId); + } + /** * 创建查询wrapper * diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java index 53336c5da..3fd066e98 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/SysMenuService.java @@ -78,6 +78,15 @@ public interface SysMenuService extends IService, SysMenuServiceApi { */ List getTotalMenus(); + /** + * 获取所有的菜单信息,用在角色绑定权限界面 + * + * @param limitMenuIds 指定筛选的菜单的范围 + * @author fengshuonan + * @since 2023/6/15 9:24 + */ + List getTotalMenus(List limitMenuIds); + /** * 调整菜单上下级结构和菜单的顺序 * diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java index b90347d14..a5eb25854 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/menu/service/impl/SysMenuServiceImpl.java @@ -157,6 +157,18 @@ public class SysMenuServiceImpl extends ServiceImpl impl return this.list(menuLambdaQueryWrapper); } + @Override + public List getTotalMenus(List limitMenuIds) { + if (ObjectUtil.isEmpty(limitMenuIds)) { + return new ArrayList<>(); + } + LambdaQueryWrapper menuLambdaQueryWrapper = new LambdaQueryWrapper<>(); + menuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuName, SysMenu::getMenuParentId, SysMenu::getAppId); + menuLambdaQueryWrapper.in(SysMenu::getMenuId, limitMenuIds); + menuLambdaQueryWrapper.orderByAsc(SysMenu::getMenuSort); + return this.list(menuLambdaQueryWrapper); + } + @Override @Transactional(rollbackFor = Exception.class) public void updateMenuTree(SysMenuRequest sysMenuRequest) { @@ -201,9 +213,8 @@ public class SysMenuServiceImpl extends ServiceImpl impl // 查询指定的菜单内容 sysMenuLambdaQueryWrapper.select(SysMenu::getMenuId, SysMenu::getMenuParentId, SysMenu::getMenuPids, SysMenu::getAppId, - SysMenu::getMenuCode, - SysMenu::getMenuName, SysMenu::getMenuType, SysMenu::getAntdvIcon, SysMenu::getAntdvVisible, SysMenu::getAntdvActiveUrl, - SysMenu::getAntdvRouter, SysMenu::getAntdvComponent, SysMenu::getMenuSort); + SysMenu::getMenuCode, SysMenu::getMenuName, SysMenu::getMenuType, SysMenu::getAntdvIcon, SysMenu::getAntdvVisible, + SysMenu::getAntdvActiveUrl, SysMenu::getAntdvRouter, SysMenu::getAntdvComponent, SysMenu::getMenuSort); sysMenuLambdaQueryWrapper.orderByAsc(SysMenu::getMenuSort); 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 8461ad1e0..cc0c9d345 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,19 +1,18 @@ package cn.stylefeng.roses.kernel.sys.modular.role.service; +import cn.stylefeng.roses.kernel.sys.api.SysRoleLimitServiceApi; import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRoleLimit; 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.Set; - /** * 角色权限限制 服务类 * * @author fengshuonan * @date 2023/09/08 12:55 */ -public interface SysRoleLimitService extends IService { +public interface SysRoleLimitService extends IService, SysRoleLimitServiceApi { /** * 获取角色绑定的权限限制列表 @@ -31,12 +30,4 @@ public interface SysRoleLimitService extends IService { */ void updateRoleBindLimit(RoleBindPermissionRequest roleBindPermissionRequest); - /** - * 获取角色的限制列表(包含菜单id和菜单功能id) - * - * @author fengshuonan - * @since 2023/9/8 14:19 - */ - Set getRoleBindLimitList(Long roleId); - } \ 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 d8906b26c..1992e3115 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,5 +1,6 @@ package cn.stylefeng.roses.kernel.sys.modular.role.service.impl; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; import cn.stylefeng.roses.kernel.sys.modular.role.action.RoleBindLimitAction; @@ -65,9 +66,18 @@ public class SysRoleLimitServiceImpl extends ServiceImpl getRoleBindLimitList(Long roleId) { + return this.getRoleBindLimitList(ListUtil.toList(roleId)); + } + + @Override + public Set getRoleBindLimitList(List roleIdList) { + if (ObjectUtil.isEmpty(roleIdList)) { + return new HashSet<>(); + } + LambdaQueryWrapper sysRoleLimitLambdaQueryWrapper = new LambdaQueryWrapper<>(); sysRoleLimitLambdaQueryWrapper.select(SysRoleLimit::getBusinessId); - sysRoleLimitLambdaQueryWrapper.eq(SysRoleLimit::getRoleId, roleId); + sysRoleLimitLambdaQueryWrapper.in(SysRoleLimit::getRoleId, roleIdList); List sysRoleMenuList = this.list(sysRoleLimitLambdaQueryWrapper); if (ObjectUtil.isEmpty(sysRoleMenuList)) { return new HashSet<>();