WangHan
2025-04-03 a1b85ef72062ca80db35546e4216dd564f3e0f57
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
package com.iplatform.base.util;
 
import com.iplatform.base.SecurityConstants;
import com.walker.infrastructure.utils.StringUtils;
 
import java.util.ArrayList;
import java.util.List;
 
public class RoleUtils {
 
    /**
     * 把登录缓存中的角色id和从数据库加载的用户菜单角色合并到一起。
     * <pre>
     *     1) 登录缓存中保存的角色分两部分:
     *       1.1 用户角色id,即:s_role 中保存的id
     *       1.2 Security定义的角色名称,如:ROLE_USER / ROLE_ADMIN/ ROLE_SUPER 等。
     *     2) 用户重新获取菜单权限后,角色ID从数据库查询(因为存在角色禁用、删除等)
     *     3) 为了保持实时性,最终要合并这两部分角色ID,否则会出现没有权限访问错误。
     * </pre>
     * @param loginCacheRoles 登录缓存中的角色ID集合
     * @param menuRoles 从数据库加载的菜单角色ID集合
     * @return
     * @date 2024-01-31
     */
    public static final List<String> combineMenuRoleAndSecurityRole(List<String> loginCacheRoles, List<String> menuRoles){
        if(StringUtils.isEmptyList(menuRoles)){
            return loginCacheRoles;
        }
        List<String> data = new ArrayList<>(8);
        for(String securityRoleName : loginCacheRoles){
            if(securityRoleName.equals(SecurityConstants.ROLE_USER)
                    || securityRoleName.equals(SecurityConstants.ROLE_ADMIN)
                    || securityRoleName.equals(SecurityConstants.ROLE_SUPER_ADMIN)
                    || securityRoleName.equals(SecurityConstants.ROLE_MERCHANT)){
                data.add(securityRoleName);
            }
        }
        data.addAll(menuRoles);
        return data;
    }
}