gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 02:21:28 25 4
gpt4 key购买 nike

我目前正在研究 spring-security 框架 - 迄今为止非常棒的东西,给我留下了深刻的印象。但是,我还没有找到在哪里或如何定义权限继承。

例如我希望 ROLE_ADMIN 至少拥有与 ROLE_USER 相同的权限。我为 spring 定义了三个 intercep-urls:

 <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/的站点时,我被拒绝了。我在这里错过了什么吗?我知道,我可以为/voting/* 分支定义多个角色,但如果我想象我在现实生活中的一个用例中可能有 10 个不同的用户角色,我可以想象 .xml 文件会变得非常困惑,真的快。

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

干杯

编辑:

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

我定义了一个反射(reflect)继承 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 字段 - 在真实环境中,该字段是从数据库加载的,相应的角色是从该枚举中选择的。

再次感谢您的投入 - 热爱这个社区 ^^

最佳答案

查看 RoleHierarchyRoleHierarchyImpl还有这个question .

关于spring - 定义具有继承权限的用户角色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6255257/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com