1

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

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

但看起来我不能使用shiroapi 来做这个,这是正确的吗?

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

我应该写一些UserGroupAwareSubject扩展名吗?

4

1 回答 1

2

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

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

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

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

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

    subject.hasRole("group:myGroupName");
    

    然后你的领域可以检查是否有那个前缀,如果有,做一个组检查,如果没有,做一个角色检查。

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

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

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

权限可能比角色或组检查更好有一些很好的理由,但如果您不这么认为并且仍然希望SubjectAPI 中表示的组,请打开一个功能请求。

问候,

莱斯

于 2013-06-22T22:24:45.943 回答