【问题标题】:does apache shiro supports user groups concept?apache shiro 支持用户组概念吗?
【发布时间】:2013-06-19 17:26:06
【问题描述】:

我正在阅读 shiro 文档,但从未发现任何迹象表明 shiro 支持 API 级别的用户组概念。

我原以为Subject.java 会有getUserGroups 这样的方法,但它没有。例如,如果我编写一些旨在与多种身份验证系统一起使用的应用程序,当用户创建某个对象时,我想让对象创建者组中的所有用户都可以看到它,并以身份验证提供者不可知的方式进行, 使用一些外观 API,比如 shiro Subject。

但是看起来我无法使用shiro api 执行此操作,对吗?

您如何在多重身份验证应用程序中支持用户组概念?

我应该写一些UserGroupAwareSubject 扩展吗?

【问题讨论】:

  • 答案是否足够?如果是这样,你应该奖励它。

标签: authorization shiro


【解决方案1】:

Shiro 从 1.2 开始在其 API 中没有组概念 - 它具有角色和权限的概念。

如果您只有角色或者您可以使用您的组名作为 Shiro 所称的角色(即 realm.hasRole(roleIdentifier, authzInfo) 使用您的组名作为“roleIdentifier”),这不是问题。

如果您的应用程序中同时包含 Role 和 Group 概念,您可能无法轻松地使用 subject.hasRole 来检查两者。如果您希望将此作为一项功能,请打开feature request

如果你想让它工作,有两个选项是:

  1. 让 realm.hasRole 调用的领域检查您的角色,并让 realm.hasRole 调用的另一领域检查您的组。
  2. 使用一个 Realm 来执行这两项操作,只需在用于组检查的字符串前面加上一个可识别的标记,例如:

    subject.hasRole("group:myGroupName");
    

    然后你的领域可以检查是否有该前缀,如果有,进行组检查,如果没有,进行角色检查。

除了这些选项,很多人在这种情况下所做的就是完全忽略角色和组检查,而是依赖(更强大的)代码中的权限检查:

subject.isPermitted("document:1234:read");

然后您的领域可以检查主题任何分配给它的组或角色,以查看它们是否暗示该权限。如果是这样,那么您根本不需要任何组或角色检查,因为您的代码依赖于权限而不是(可能不稳定且众多)组/角色概念。

why permissions are probably better than Role or Group checks 有一些很好的理由,但如果您不这么认为并且仍然希望 Subject API 中表示的组,请打开一个功能请求。

问候,

莱斯

【讨论】:

  • 谢谢详细解答
  • 是否可以对权限进行限制,例如。限制特定用户的“读取”,尽管允许用户的角色?
猜你喜欢
  • 2015-11-22
  • 2018-05-30
  • 2013-10-08
  • 2021-08-17
  • 1970-01-01
  • 2016-12-21
  • 2012-05-20
  • 2019-10-06
  • 1970-01-01
相关资源
最近更新 更多