我正在阅读shiro
文档,但从未发现shiro
在API级别支持用户组概念的任何迹象。
我原本预计Subject.java
会有getUserGroups
这样的方法,但事实并非如此。例如,如果我编写了一些旨在与众多身份验证系统一起使用的应用程序,那么当用户创建一些对象时,我想让对象创建者组中的所有用户都可以看到它,并且以身份验证提供程序不可知的方式进行,使用一些外观API,如shiro Subject。
但看起来我无法使用shiro
api执行此操作,这是正确的吗?
如何在多验证应用程序中支持用户组概念?
我应该写一些UserGroupAwareSubject
分机吗?
答案 0 :(得分:2)
Shiro从1.2开始在其API中没有Group概念 - 它具有角色和权限的概念。
如果您只有角色,或者您可以使用您的组名称作为Shiro调用的角色(即,realm.hasRole(roleIdentifier,authzInfo)使用您的组名称作为'roleIdentifier'),则这不是问题。
如果您的应用程序中同时具有Role和Group概念,则可能无法轻松地使用subject.hasRole进行检查。如果您想将此作为一项功能,请打开feature request。
如果你想让它工作,有两个选择:
使用一个Realm执行这两个操作,并使用可识别的令牌将用于组检查的字符串作为前缀,例如:
subject.hasRole("group:myGroupName");
然后您的领域可以检查是否有该前缀,如果是,则进行组检查,如果没有,则进行角色检查。
除了这些选项之外,许多人在这种情况下做的是完全忽略角色和组检查,而是依赖于代码中的(更强大的)权限检查:
subject.isPermitted("document:1234:read");
然后,您的领域可以检查主题和任何已分配的组或角色,以查看它们是否暗示该权限。如果是这样,那么您根本不需要任何组或角色检查,因为您的代码依赖于权限而不是(可能是易变的和众多的)组/角色概念。
有一些很好的理由why permissions are probably better than Role or Group checks,但如果您不这么认为并且仍然希望在Subject
API中代表群组,请打开功能请求。
此致
莱斯