【问题标题】:Advice on using Shiro to restrict resultset关于使用 Shiro 限制结果集的建议
【发布时间】:2017-01-22 05:41:54
【问题描述】:

我们有一个允许用户查看文档列表的应用程序。

根据用户的角色和文档的属性,我们要过滤掉列表中的一些文档。例如,我们希望允许用户查看一个列表,其中仅包含他创建的文档,其余的为灰色线条。

此时应用程序执行 SQL SELECT 命令,该命令返回用户可以看到和看不到的条目列表。我们希望之后根据用户的权限和角色来限制这个结果集。 我们的问题如下:

  • 这可以通过 Shiro 完成吗?
  • 在使用 Shiro 时设置此类限制的正确方法是什么?例如我们是否应该使用 SELECT 语句从一开始就限制列表?

【问题讨论】:

    标签: java authorization shiro


    【解决方案1】:

    您有几个选择: 首先,因为听起来您想向用户显示完整的文档列表,所以您仍然需要查询所有文档。 (尽管我警告您,因为这会泄露用户也无权访问的信息。例如,用户“jcoder”看到一个标题为“超级秘密密码”的文档,他知道你有这个文档。这可能或可能不重要适用于您的用例)

    如果您的用例只是“只有作者可以编辑他们自己的文档”,那么您可以只进行简单的用户名比较(我猜您现在正在这样做)

    大多数用例并非如此简单,需要作者以及管理员、技术作者等访问资源。因此,您可以为资源分配一组权限。我们可以称它为publications:docs:<document_id>:<action>,或者只是docs:<document_id>:<action>。其中document_id 是一些唯一的文档标识符,action 是对资源执行的操作(在典型的 CRUD 应用程序中,它们将被创建、读取、更新、删除)。 此权限可以授予任何用户,publications:docs:<document_id>:* 可以授予作者。如果有人更改职位或文档需要标记为只读,除管理员外的所有用户,这也允许撤销权限。

    sn-p 代码如下所示:

    if(SecurityUtils.getSubject().isPermitted("publications:docs:":"+ documentId + ":read" ) {
      // do something
    }
    

    或者你可以检查他们all at once

    您的应用程序需要跟踪向用户添加权限。

    看看:http://shiro.apache.org/permissions.html

    还有一个类似的问题:Java – efficient, database-aware instance-level authorization?

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多