簡體   English   中英

Spring Security:檢查用戶是否具有分層角色的方法

[英]Spring Security: method to check if a user has a Hierarchical Role

我如何檢查用戶在運行時是否具有分層角色? 我知道這種針對URL授權@PreAuthorize("hasRole('ROLE_ADMIN')")解決方案,但是在方法內部,如果我必須檢查角色?

例如:

ROLE_ADMIN> ROLE_USER> ROLE_GUEST

if (user.hasRole('ROLE_USER')){
    do something;
}

在此示例中,如果用戶具有ROLE_ADMIN,則條件必須為true,因為在分層角色ROLE_ADMIN> ROLE_USER中。

謝謝

感謝大家的答復。 也許我找到了解決方案。 我使用此@Configuration創建了一個自定義的分層角色系統:

    @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;
    }

之后,我創建了一個幫助功能:

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;
    }

似乎可行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM