Shiro 从 1.2 开始在其 API 中没有组概念 - 它具有角色和权限的概念。
如果您只有角色或者您可以使用您的组名作为 Shiro 所称的角色(即 realm.hasRole(roleIdentifier, authzInfo) 使用您的组名作为“roleIdentifier”),这不是问题。
如果您的应用程序中同时包含 Role 和 Group 概念,您可能无法轻松使用 subject.hasRole 来检查两者。如果您希望将此作为功能,请打开功能请求。
如果你想让它工作,有两个选择是:
- 让一个领域(realm.hasRole 调用)检查您的角色,另一个领域(realm.hasRole 调用)检查您的组。
使用一个 Realm 来执行这两项操作,并且只需在用于组检查的字符串前面加上一个可识别的标记,例如:
subject.hasRole("group:myGroupName");
然后你的领域可以检查是否有那个前缀,如果有,做一个组检查,如果没有,做一个角色检查。
除了这些选项,许多人在这种情况下所做的就是完全忽略角色和组检查,而是依赖代码中的(更强大的)权限检查:
subject.isPermitted("document:1234:read");
然后,您的领域可以检查主题及其分配的任何组或角色,以查看它们是否暗示该权限。如果是这样,那么您根本不需要任何组或角色检查,因为您的代码依赖于权限而不是(可能不稳定且众多)组/角色概念。
权限可能比角色或组检查更好有一些很好的理由,但如果您不这么认为并且仍然希望Subject
API 中表示的组,请打开一个功能请求。
问候,
莱斯