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

问题描述 投票:1回答:1

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

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

但看起来我不能用shiro api这样做,这是正确的吗?

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

我应该写一些UserGroupAwareSubject扩展吗?

authorization shiro
1个回答
2
投票

截至1.2的Shiro在其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"); 然后您的领域可以检查是否有该前缀,如果是,则进行组检查,如果没有,则进行角色检查。

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

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

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

有一些很好的理由why permissions are probably better than Role or Group checks,但如果您有其他感觉,并且仍然希望在Subject API中代表任何组,请打开功能请求。

问候,

© www.soinside.com 2019 - 2024. All rights reserved.