diff --git a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysRoleServiceApi.java b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysRoleServiceApi.java index ff0b87bc4..2a3eee8ba 100644 --- a/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysRoleServiceApi.java +++ b/kernel-s-system/system-api/src/main/java/cn/stylefeng/roses/kernel/sys/api/SysRoleServiceApi.java @@ -24,6 +24,8 @@ */ package cn.stylefeng.roses.kernel.sys.api; +import java.util.List; + /** * 角色信息相关的Api * @@ -50,4 +52,12 @@ public interface SysRoleServiceApi { */ String getRoleNameByRoleId(Long roleId); + /** + * 获取角色对应的菜单功能编码集合 + * + * @author fengshuonan + * @since 2023/10/10 14:33 + */ + List getRoleMenuOptionsByRoleId(String roleCode); + } diff --git a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleServiceImpl.java b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleServiceImpl.java index bd4d24643..17b5b1576 100644 --- a/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleServiceImpl.java +++ b/kernel-s-system/system-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/role/service/impl/SysRoleServiceImpl.java @@ -2,6 +2,7 @@ package cn.stylefeng.roses.kernel.sys.modular.role.service.impl; import cn.hutool.core.bean.BeanUtil; import cn.hutool.core.collection.CollectionUtil; +import cn.hutool.core.collection.ListUtil; import cn.hutool.core.util.ObjectUtil; import cn.hutool.extra.spring.SpringUtil; import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; @@ -16,10 +17,12 @@ import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi; import cn.stylefeng.roses.kernel.sys.api.callback.RemoveRoleCallbackApi; import cn.stylefeng.roses.kernel.sys.api.constants.SysConstants; import cn.stylefeng.roses.kernel.sys.api.enums.permission.DataScopeTypeEnum; +import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuOptionsService; import cn.stylefeng.roses.kernel.sys.modular.role.entity.SysRole; import cn.stylefeng.roses.kernel.sys.modular.role.enums.exception.SysRoleExceptionEnum; import cn.stylefeng.roses.kernel.sys.modular.role.mapper.SysRoleMapper; import cn.stylefeng.roses.kernel.sys.modular.role.pojo.request.SysRoleRequest; +import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService; import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleService; import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper; import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper; @@ -29,6 +32,7 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import javax.annotation.Resource; +import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Set; @@ -45,6 +49,12 @@ public class SysRoleServiceImpl extends ServiceImpl impl @Resource private SysUserRoleServiceApi sysUserRoleServiceApi; + @Resource + private SysRoleMenuOptionsService sysRoleMenuOptionsService; + + @Resource + private SysMenuOptionsService sysMenuOptionsService; + @Override public void add(SysRoleRequest sysRoleRequest) { SysRole sysRole = new SysRole(); @@ -258,6 +268,33 @@ public class SysRoleServiceImpl extends ServiceImpl impl return ""; } + @Override + public List getRoleMenuOptionsByRoleId(String roleCode) { + + if (ObjectUtil.isEmpty(roleCode)) { + return new ArrayList<>(); + } + + // 获取角色编码对应的角色id + LambdaQueryWrapper sysRoleLambdaQueryWrapper = new LambdaQueryWrapper<>(); + sysRoleLambdaQueryWrapper.eq(SysRole::getRoleCode, roleCode); + sysRoleLambdaQueryWrapper.select(SysRole::getRoleId); + SysRole sysRole = this.getOne(sysRoleLambdaQueryWrapper, false); + if (sysRole == null) { + return new ArrayList<>(); + } + Long roleId = sysRole.getRoleId(); + + // 获取角色的角色功能id集合 + List roleBindMenuOptionsIdList = sysRoleMenuOptionsService.getRoleBindMenuOptionsIdList(ListUtil.list(false, roleId)); + if (ObjectUtil.isEmpty(roleBindMenuOptionsIdList)) { + return new ArrayList<>(); + } + + // 获取角色功能id的集合对应的功能编码集合 + return sysMenuOptionsService.getOptionsCodeList(roleBindMenuOptionsIdList); + } + /** * 获取信息 *