定义具有继承权限的用户角色

时间:2011-06-06 16:42:47

标签: spring spring-security rights security-roles

我目前正在研究弹簧安全框架 - 到目前为止很棒的东西,给人留下了深刻的印象。 但是,我还没有找到定义权限继承的位置或方法。

e.g。我希望ROLE_ADMIN至少具有与ROLE_USER相同的权限。我为春天定义了三个拦截网址:

 <intercept-url pattern="/auth/login.do" access="permitAll"/>
 <intercept-url pattern="/voting/*" access="hasRole('ROLE_USER')"/>
 <intercept-url pattern="/admin/*" access="hasRole('ROLE_ADMIN')"/>

当尝试访问任何嵌套/投票/的网站时,在以ROLE_ADMIN用户身份登录时,我被拒绝了。我在这里错过了什么吗?我知道,我可以为/ voting / *分支定义几个角色,但如果我想在我的一个真实用例中可能有10个不同的用户角色,我可以想象.xml文件真的很乱,真的快。

我可以在某处配置角色的继承吗?

欢呼声

修改

感谢伟大的社区和他们的投入,我想出了一个有效的解决方案 - 它可能是好的风格 - 它有效:D

我定义了一个枚举,它反映了继承的spring-sec角色:

public enum UserRoles {
     ROLE_USER(new String[]{"ROLE_USER"}),
     ROLE_ADMIN(new String[]{"ROLE_USER", "ROLE_ADMIN"});
     private final String[] roles;

     private UserRoles(String[] roles) {
          this.roles = roles;
     }

     public String[] getRoles() {
          return roles;
     }
}

然后我实现了自己的UserDetailsS​​ervice:

在方法中

@Override
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException, DataAccessException { ... }

在向UserDetail添加授予的权限时,我得到相应的枚举值并附加此枚举值定义的所有角色:

        List<GrantedAuthority> authList = new ArrayList<GrantedAuthority>(2);
        for (String role : UserRoles.ROLE_ADMIN.getRoles()) {
            authList.add(new GrantedAuthorityImpl(role));
        }
        UserDetails user = null;
        try {
            //user = new User(username, md5.hashPassword(username), true, true, true, true, authList);
        } catch (NoSuchAlgorithmException ex) {
            logger.error(ex.getMessage(), ex);
        }

我的持久化域名对象,包含带有UserRole的@Enumerated字段 - 在真实环境中,此字段从数据库加载,相应的角色从该枚举中选取。

再次感谢输入 - 喜欢这个社区^^

2 个答案:

答案 0 :(得分:4)

答案 1 :(得分:1)

据我所知,Spring Security不支持角色和权限的概念。在Spring中,安全性只有角色有时称为权限 - 而且:在Spring Security中,角色/权限是角色和权限系统中的权限称为权限。


因此,如果您想构建一个角色和权限系统,那么您需要通过构建自己的Spring Security AuthenticationManager来实现这一目标,然后使用权限等Spring安全角色/权限。

@See This Blog:Spring Security customization (Part 1 – Customizing UserDetails or extending GrantedAuthority) - 它是为Spring Security 2.0编写的,展示了如何实现我所说的内容。它还坚持RoleHierarchy有一些缺点,但这篇文章大概是2.0,可能在3.0中的缺点已经消失了