apache shiro是否支持用户组概念?

时间:2013-06-22 19:35:29

标签: authorization shiro

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

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

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

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

我应该写一些UserGroupAwareSubject分机吗?

1 个答案:

答案 0 :(得分:2)

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

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

如果您的应用程序中同时具有Role和Group概念,则可能无法轻松地使用subject.hasRole进行检查。如果您想将此作为一项功能,请打开feature request

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

  1. 让一个Realm.hasRole调用的Realm检查你的角色和另一个Realm.hasRole调用你的组的域。
  2. 使用一个Realm执行这两个操作,并使用可识别的令牌将用于组检查的字符串作为前缀,例如:

    subject.hasRole("group:myGroupName");
    

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

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

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

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

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

    此致

    莱斯