hsy
5 天以前 cea2f5013782770a2cc99cc89b14cf5c2869bca5
feat(security): add role codes to LoginUser info and provide utility methods
已修改3个文件
44 ■■■■■ 文件已修改
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/LoginUser.java 1 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/util/SecurityFrameworkUtils.java 23 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java 20 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/LoginUser.java
@@ -20,6 +20,7 @@
    public static final String INFO_KEY_NICKNAME = "nickname";
    public static final String INFO_KEY_DEPT_ID = "deptId";
    public static final String INFO_KEY_ROLE_CODES = "roleCodes";
    /**
     * 用户编号
yudao-framework/yudao-spring-boot-starter-security/src/main/java/cn/iocoder/yudao/framework/security/core/util/SecurityFrameworkUtils.java
@@ -114,6 +114,29 @@
    }
    /**
     * 获得当前用户的角色编码列表,从上下文中
     *
     * @return 角色编码列表
     */
    public static java.util.List<String> getLoginUserRoleCodeList() {
        LoginUser loginUser = getLoginUser();
        if (loginUser == null || loginUser.getInfo() == null) {
            return Collections.emptyList();
        }
        String roleCodes = loginUser.getInfo().get(LoginUser.INFO_KEY_ROLE_CODES);
        return StrUtil.isNotEmpty(roleCodes) ? StrUtil.split(roleCodes, ",") : Collections.emptyList();
    }
    /**
     * 判断当前用户是否为超级管理员
     *
     * @return 是否为超级管理员
     */
    public static boolean isSuperAdmin() {
        return getLoginUserRoleCodeList().contains("super_admin");
    }
    /**
     * 设置当前用户
     *
     * @param loginUser 登录用户
yudao-module-system/src/main/java/cn/iocoder/yudao/module/system/service/oauth2/OAuth2TokenServiceImpl.java
@@ -57,6 +57,12 @@
    @Resource
    @Lazy // 懒加载,避免循环依赖
    private AdminUserService adminUserService;
    @Resource
    @Lazy
    private cn.iocoder.yudao.module.system.service.permission.PermissionService permissionService;
    @Resource
    @Lazy
    private cn.iocoder.yudao.module.system.service.permission.RoleService roleService;
    @Override
    @Transactional(rollbackFor = Exception.class)
@@ -226,8 +232,18 @@
        }
        if (userType.equals(UserTypeEnum.ADMIN.getValue())) {
            AdminUserDO user = adminUserService.getUser(userId);
            return MapUtil.builder(LoginUser.INFO_KEY_NICKNAME, user.getNickname())
                    .put(LoginUser.INFO_KEY_DEPT_ID, StrUtil.toStringOrNull(user.getDeptId())).build();
            java.util.Map<String, String> info = new java.util.HashMap<>();
            info.put(LoginUser.INFO_KEY_NICKNAME, user.getNickname());
            info.put(LoginUser.INFO_KEY_DEPT_ID, cn.hutool.core.util.StrUtil.toStringOrNull(user.getDeptId()));
            // Fetch roles and put into info
            java.util.Set<Long> roleIds = permissionService.getUserRoleIdListByUserId(userId);
            if (cn.hutool.core.collection.CollUtil.isNotEmpty(roleIds)) {
                java.util.List<cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO> roles = roleService.getRoleList(roleIds);
                if (cn.hutool.core.collection.CollUtil.isNotEmpty(roles)) {
                    info.put(LoginUser.INFO_KEY_ROLE_CODES, cn.hutool.core.collection.CollUtil.join(roles, ",", cn.iocoder.yudao.module.system.dal.dataobject.permission.RoleDO::getCode));
                }
            }
            return info;
        } else if (userType.equals(UserTypeEnum.MEMBER.getValue())) {
            // 注意:目前 Member 暂时不读取,可以按需实现
            return Collections.emptyMap();