【发布时间】:2021-07-09 19:03:19
【问题描述】:
我目前的理解是 Spring 不区分角色和权限,唯一的区别是角色名称的 ROLE_ 首字母缩写词。
我希望实现的是具有权限的角色。 Aka 如果我给用户角色 ADMIN,他将获得所有相关的权限(例如,访问网站上的路由以更新页面的权限)
我当前的实现如下:我有一个自定义的 Privilege 类,它与 Roles 类具有多对多关系,而 Roles 类与用户类具有多对多关系。当调用 UserDetails 的public Collection<? extends GrantedAuthority> getAuthorities() 时,它会遍历所有权限并获取。
@Override
public Collection<? extends GrantedAuthority> getAuthorities() {
List<SimpleGrantedAuthority> authorities = new ArrayList<>();
for (Role role : this.roles) {
for (Privilege pri : role.getPrivileges()) {
SimpleGrantedAuthority auth = new SimpleGrantedAuthority(pri.getName());
if (!authorities.contains(auth)) {
authorities.add(auth);
}
}
}
return authorities;
}
我的问题:有没有更好的方法来做到这一点(最好是原生于 Spring Security)?
EDIT :角色位于数据库中,以允许动态插入新角色。目前权限也是如此,但可能会被删除以进行硬编码(动态权限在此特定实现中没有多大意义)
【问题讨论】:
标签: java spring spring-security