首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Spring Security中Role和GrantedAuthority的区别

Spring Security中Role和GrantedAuthority的区别
EN

Stack Overflow用户
提问于 2013-10-23 02:17:50
回答 2查看 136K关注 0票数 284

Spring Security中有一些概念和实现,比如用来获得授权/控制访问权限的GrantedAuthority接口。

我希望这是允许的操作,如createSubUsers或deleteAccounts,我会允许管理员(具有ROLE_ADMIN角色)。

我对我在网上看到的教程/演示感到困惑。我试着将我读到的东西联系起来,但我认为我们可以互换对待这两者。

我看到hasRole在使用GrantedAuthority字符串?我在理解上肯定是做错了。在Spring Security中,这些概念是什么?

我如何存储用户的角色,独立于该角色的权限?

我还查看了身份验证提供者引用的DAO中使用的org.springframework.security.core.userdetails.UserDetails接口,它使用了一个User (注意最后一个GrantedAuthority):

代码语言:javascript
复制
public User(String username, 
            String password, 
            boolean enabled, 
            boolean accountNonExpired,
            boolean credentialsNonExpired, 
            boolean accountNonLocked, 
            Collection<? extends GrantedAuthority> authorities)

或者,有没有其他方法来区分其他两个?或者它不被支持,我们必须自己制作?

EN

回答 2

Stack Overflow用户

发布于 2018-05-15 07:13:00

理解这些概念之间关系的另一种方法是将角色解释为权威的容器。

权限是针对特定操作的细粒度权限,有时还带有特定的数据范围或上下文。例如,读、写、管理可以表示对给定信息范围的各种级别的许可。

此外,权限在请求的处理流程中执行得很深,而角色在到达控制器之前通过请求过滤方式进行过滤。最佳实践规定了在业务层中通过Controller实现授权实施。

另一方面,角色是一组权限的粗粒度表示。ROLE_READER将只具有读取或查看权限,而ROLE_EDITOR将同时具有读取和写入权限。角色主要用于在请求处理的外围的第一次筛选,例如http。... .antMatcher(...).hasRole(ROLE_MANAGER)

在请求的处理流程中深入实施的授权允许更细粒度的权限应用。例如,用户可能对第一级资源具有读写权限,但仅具有对子资源的读写权限。拥有ROLE_READER会限制他编辑第一级资源的权限,因为他需要写权限才能编辑这个资源,但是@PreAuthorize拦截器可以阻止他编辑子资源的试探性权限。

杰克

票数 9
EN

Stack Overflow用户

发布于 2020-02-17 03:10:03

正如其他人所提到的,我认为角色是更细粒度权限的容器。

尽管我发现层级角色实现缺乏对这些细粒度权限的精细控制。

因此,我创建了一个库来管理这些关系,并在安全上下文中按照已授予的权限注入权限。

我可能在应用程序中有一组权限,比如创建、读取、更新、删除,然后与用户的角色相关联。

或更具体的权限,如READ_POST、READ_PUBLISHED_POST、CREATE_POST、PUBLISH_POST

这些权限是相对静态的,但角色与它们的关系可能是动态的。

示例:

代码语言:javascript
复制
@Autowired 
RolePermissionsRepository repository;

public void setup(){
  String roleName = "ROLE_ADMIN";
  List<String> permissions = new ArrayList<String>();
  permissions.add("CREATE");
  permissions.add("READ");
  permissions.add("UPDATE");
  permissions.add("DELETE");
  repository.save(new RolePermissions(roleName, permissions));
}

您可以创建API来管理这些权限与角色的关系。

我不想复制/粘贴另一个答案,所以这里有一个关于SO的更完整解释的链接。

https://stackoverflow.com/a/60251931/1308685

为了重用我的实现,我创建了一个repo。请随时贡献自己的力量!

https://github.com/savantly-net/spring-role-permissions

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

https://stackoverflow.com/questions/19525380

复制
相关文章

相似问题

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