使用apache shiro进行权限控制

时间:2013-06-19 09:04:20

标签: shiro

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

这是一个很棒的框架,但我不知道它是否符合我的要求。

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

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

currentUser.isPermitted( "resource:delete" );

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

例如(只是一个例子),资源有一个名为createdby的字段来记录创建此资源的字段。

现在,如果用户具有resouce:delete权限,则用户只能删除自己创建的资源。

事实上,用户可以删除的资源(经过身份验证且具有delete权限的人)将通过更多约束来计算。

现在如何让shiro在这个职业中工作?

2 个答案:

答案 0 :(得分:3)

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

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

如果您覆盖AuthorizingRealm子类中的isPermitted方法,您将有权访问登录用户的主体用户的角色:这会给您带来很大的灵活性,因为您可以说:user (校长)弗雷德角色:经理,管理员。然后,您的权限模型可以决定Fred,管理员或管理员是否可以在指定资源上执行任务。

希望能给你一些想法。

答案 1 :(得分:0)

从某种程度上说,我已经探索过Shiro,我认为它不具备这种灵活性来进行定制检查。它基本上基于配置文件中定义的角色和权限来运行。

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