使用apache shiro进行权限控制



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

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

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

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

currentUser.isPermitted( "resource:delete" );

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

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

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

实际上,该用户(已通过认证且具有delete权限的用户)可以删除的资源将被更多的约束计算。

现在如何使shiro在这种情况下工作?

您可以在Shiro中这样做,但是您必须编写一些代码。创建Authorizer的子类并将其注入到安全管理器中,或者创建一个领域类(如JdbcRealm)的子类。然后重写isallowed方法。这将需要访问您的权限模型,例如数据库表或NoSQL数据库中的文档。

你对isallowed的调用需要指定你要删除的资源,这样你就可以在你的重写方法中查找它。

如果您在AuthorizingRealm子类中重写isallowed方法,您将可以访问登录用户的主体用户的角色:这给了您相当大的灵活性,因为您可以拥有用户(主体)Fred的角色:Manager, Administrator。然后,您的权限模型可以决定Fred、Manager或Administrator是否可以在指定的资源上执行任务。

从我探索Shiro的程度来看,我认为它没有提供定制检查的灵活性。它基本上是基于配置文件中定义的角色和权限来工作的。

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

最新更新