diff --git a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java index db3b70c55..6fb2cfe66 100644 --- a/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java +++ b/kernel-s-sys/sys-business-permission/src/main/java/cn/stylefeng/roses/kernel/sys/modular/login/service/UserIndexInfoService.java @@ -5,15 +5,21 @@ import cn.stylefeng.roses.kernel.auth.api.context.LoginContext; import cn.stylefeng.roses.kernel.auth.api.pojo.login.LoginUser; import cn.stylefeng.roses.kernel.rule.enums.YesOrNotEnum; import cn.stylefeng.roses.kernel.sys.api.SysUserOrgServiceApi; +import cn.stylefeng.roses.kernel.sys.api.SysUserRoleServiceApi; import cn.stylefeng.roses.kernel.sys.api.SysUserServiceApi; import cn.stylefeng.roses.kernel.sys.api.pojo.user.SimpleUserDTO; import cn.stylefeng.roses.kernel.sys.api.pojo.user.UserOrgDTO; import cn.stylefeng.roses.kernel.sys.modular.login.pojo.IndexUserOrgInfo; import cn.stylefeng.roses.kernel.sys.modular.login.pojo.UserIndexInfo; +import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuOptionsService; +import cn.stylefeng.roses.kernel.sys.modular.menu.service.SysMenuService; +import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuOptionsService; +import cn.stylefeng.roses.kernel.sys.modular.role.service.SysRoleMenuService; import org.springframework.stereotype.Service; import javax.annotation.Resource; import java.util.ArrayList; +import java.util.HashSet; import java.util.List; /** @@ -31,6 +37,21 @@ public class UserIndexInfoService { @Resource private SysUserOrgServiceApi sysUserOrgServiceApi; + @Resource + private SysUserRoleServiceApi sysUserRoleServiceApi; + + @Resource + private SysRoleMenuService sysRoleMenuService; + + @Resource + private SysRoleMenuOptionsService sysRoleMenuOptionsService; + + @Resource + private SysMenuService sysMenuService; + + @Resource + private SysMenuOptionsService sysMenuOptionsService; + /** * 获取用户首页信息 * @@ -52,9 +73,11 @@ public class UserIndexInfoService { this.fillUserOrgInfo(loginUser, userIndexInfo); // 3. 获取用户的权限编码集合 + this.fillUserPermissionCodeList(loginUser, userIndexInfo); // 4. 获取用户的当前登录App和菜单 + // 5. 获取菜单和路由的appId映射关系 // 6. 构建websocket url @@ -127,21 +150,13 @@ public class UserIndexInfoService { // 如果当前没激活的组织机构,则直接将主部门激活 if (currentOrgId == null) { for (IndexUserOrgInfo indexUserOrgInfo : resultUserOrg) { - if (indexUserOrgInfo.getMainFlag()) { - indexUserOrgInfo.setCurrentSelectFlag(true); - } else { - indexUserOrgInfo.setCurrentSelectFlag(false); - } + indexUserOrgInfo.setCurrentSelectFlag(indexUserOrgInfo.getMainFlag()); } } // 如果有激活的组织机构 else { for (IndexUserOrgInfo indexUserOrgInfo : resultUserOrg) { - if (indexUserOrgInfo.getOrgId().equals(currentOrgId)) { - indexUserOrgInfo.setCurrentSelectFlag(true); - } else { - indexUserOrgInfo.setCurrentSelectFlag(false); - } + indexUserOrgInfo.setCurrentSelectFlag(indexUserOrgInfo.getOrgId().equals(currentOrgId)); } } @@ -149,4 +164,39 @@ public class UserIndexInfoService { userIndexInfo.setUserOrgInfo(resultUserOrg); } + /** + * 填充用户的权限编码集合 + * + * @author fengshuonan + * @since 2023/6/19 12:38 + */ + private void fillUserPermissionCodeList(LoginUser loginUser, UserIndexInfo userIndexInfo) { + + Long userId = loginUser.getUserId(); + + // 获取用户的角色集合 + List roleIdList = sysUserRoleServiceApi.getUserRoleIdList(userId); + + if (ObjectUtil.isEmpty(roleIdList)) { + userIndexInfo.setPermissionCodeList(new HashSet<>()); + return; + } + + // 获取角色对应的菜单id和菜单功能id + List menuIdList = sysRoleMenuService.getRoleBindMenuIdList(roleIdList); + List menuOptionsIdList = sysRoleMenuOptionsService.getRoleBindMenuOptionsIdList(roleIdList); + + HashSet permissionCodeList = new HashSet<>(); + + // 获取菜单对应的菜单编码集合 + List menuCodeList = sysMenuService.getMenuCodeList(menuIdList); + permissionCodeList.addAll(menuCodeList); + + // 获取功能对应的功能编码集合 + List optionsCodeList = sysMenuOptionsService.getOptionsCodeList(menuOptionsIdList); + permissionCodeList.addAll(optionsCodeList); + + userIndexInfo.setPermissionCodeList(permissionCodeList); + } + }