首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Spring Security:检查用户是否具有分层角色的方法

Spring Security:检查用户是否具有分层角色的方法
EN

Stack Overflow用户
提问于 2017-05-30 21:42:45
回答 1查看 1.5K关注 0票数 3

如何在运行时检查用户是否具有分层角色?我知道url授权@PreAuthorize("hasRole('ROLE_ADMIN')")的这个解决方案,但是如果我必须检查角色呢?

例如:

ROLE_ADMIN > ROLE_USER > ROLE_GUEST

代码语言:javascript
代码运行次数:0
运行
复制
if (user.hasRole('ROLE_USER')){
    do something;
}

在本例中,如果用户拥有ROLE_ADMIN,则条件必须为真,因为在分层角色中,ROLE_ADMIN > ROLE_USER。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-05-30 23:43:27

感谢所有人的回复。也许我找到了解决方案。我用@Configuration创建了一个自定义的分层角色系统:

代码语言:javascript
代码运行次数:0
运行
复制
    @Bean
    public RoleHierarchy roleHierarchy(){
        RoleHierarchyImpl roleHierarchy = new RoleHierarchyImpl();
        roleHierarchy.setHierarchy("ROLE_SUPERADMIN > ROLE_ADMIN ROLE_ADMIN > ROLE_USER ROLE_USER > ROLE_GUEST");
        return roleHierarchy;
    }

    @Bean
    public RoleHierarchyVoter roleVoter() {     
        return new RoleHierarchyVoter(roleHierarchy());
    }

    @Bean 
    public DefaultWebSecurityExpressionHandler expressionHandler(){
        DefaultWebSecurityExpressionHandler expressionHandler = new DefaultWebSecurityExpressionHandler();
        expressionHandler.setRoleHierarchy(roleHierarchy());
        return expressionHandler;
    }

在那之后,我创建了一个帮助函数:

代码语言:javascript
代码运行次数:0
运行
复制
public static boolean hasHierarchyRole(String role, RoleHierarchy roleHierarchy) {

        Collection<? extends GrantedAuthority> authorities = SecurityContextHolder.getContext().getAuthentication().getAuthorities();

        Collection<? extends GrantedAuthority> hierarchyAuthorities = roleHierarchy.getReachableGrantedAuthorities(authorities);

        for (GrantedAuthority authority : hierarchyAuthorities) {
            if (authority.getAuthority().equals(role)) {
                return true;
            }
        }

        return false;
    }

而且看起来很管用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44263972

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档