1

我是 apache shiro 的新手,我在 apache shiro 页面中阅读了近 60% 的教程。

这是一个很棒的框架,但是我想知道它是否可以满足我的要求。

我对基于权限的身份验证感兴趣。

例如,要确定用户是否有删除资源的权限,我们可以这样使用:

currentUser.isPermitted( "resource:delete" );

但是在我们的应用程序中,即使用户有删除资源的权限,他也只能删除一些指定的资源,而不是全部。

例如(只是一个例子),资源有一个名为createdby记录创建此资源的人的文件。

现在用户只有拥有resouce:delete权限才能删除自己创建的资源。

实际上,用户(已认证并有delete权限)可以删除的资源将由更多的约束来计算。

现在如何让 shiro 在这个套装中工作?

4

2 回答 2

3

您可以在 Shiro 中执行此操作,但您必须编写一些代码。要么创建 Authorizer 的子类并将其注入安全管理器,要么创建领域类之一的子类,例如 JdbcRealm。然后重写 isPermitted 方法。这将需要访问您的权限模型,例如 NoSQL 数据库中的数据库表或文档。

您对 isPermitted 的调用将需要指定您要删除的资源,以便您可以在覆盖的方法中查找它。

如果您在 AuthorizingRealm 子类中覆盖 isPermitted 方法,您将可以访问登录用户的主体用户的角色:这为您提供了相当多的灵活性,因为您可以说:用户(主体)Fred 角色:经理,管理员. 然后,您的权限模型可以决定 Fred、经理或管理员是否可以对指定资源执行任务。

希望能给你一些想法。

于 2014-09-06T19:31:54.640 回答
0

从我探索 Shiro 的程度来看,我不认为它提供了那种程度的灵活性来进行自定义检查。它基本上基于配置文件中定义的角色和权限来运行。

对于此功能,我建议您仅显示允许用户删除的那些记录,方法是在查询获取级别进行此检查。(或)如果登录用户与创建者相同,则在 UI 级别添加不显示删除按钮的条件。这只是一个建议。

于 2013-06-19T09:19:54.940 回答