gpt4 book ai didi

security - 资源列表授权的最佳实践是什么?

转载 作者:行者123 更新时间:2023-12-04 19:24:54 25 4
gpt4 key购买 nike

发布和/或协作应用程序通常涉及共享对资源的访问。在门户中,用户可能被授予对某些内容的访问权限作为组的成员或由于明确的访问权限。完整的内容集可以包括公共(public)内容、群组成员内容和私有(private)用户内容。或者,对于协作应用程序,我们可能希望将资源作为工作流程的一部分传递或共享文档的保管以进行编辑。

由于大多数应用程序将这些资源存储在数据库中,因此您通常会创建查询,例如“获取我可以编辑的所有文档”或“获取我可以看到的所有内容”。其中“可以编辑”和“可以查看”是用户的权限。

我有两个问题:

  • 检索资源后,对用户进行授权非常容易,但是如何有效地对可用资源列表执行授权呢?并且,
  • 这种授权可以脱离应用的核心吗?也许进入一个单独的服务?分离后,您如何过滤诸如“获取所有我可以看到的标题为 [SomeSearchTerm] 的文档”之类的查询?在我看来,您的单独系统将不得不复制大量引用数据。
  • 最佳答案

    您可能有兴趣阅读 this article by Steffen Bartsch .它总结了 Ruby on Rails 的所有授权插件,我相信它会帮助您找到解决方案(虽然本文是关于 Rails 插件的,但这些概念很容易在 Rails 之外导出)。

    Steffen 还构建了自己的插件,称为“声明式授权”,它似乎符合您的需求,恕我直言:

  • 一方面,您定义 角色 (例如“访客”、“管理员”...)。您的 用户 与这些角色相关联(在多对多关系中)。您将这些角色映射到 特权 (同样是多对多关系)。每个特权都链接到给定的 上下文 .例如,角色“访问者”可能具有“阅读文档”权限。在此示例中,“读取”是权限,它应用于“文档”上下文。
  • 注意:在 Steffen 的插件中,您可以定义角色的层次结构。例如,您可能希望“global_admin”角色包括“document_admin”角色以及“comment_admin”角色等。
  • 您还可以定义权限层次结构:例如,“管理”权限可以包括“读取”、“更新”、“添加”和“删除”权限。
  • 另一方面,您根据 编写应用程序的思想。特权 上下文 ,而不是角色。例如,显示文档的 Action 应该只检查用户是否具有在“文档”上下文中“阅读”的权限(无需检查用户是否具有“访问者”角色或任何其他角色)。这极大地简化了您的代码,因为大多数授权逻辑都在其他地方提取(甚至可能由其他人定义)。

  • 用户角色的定义和应用程序级权限的定义之间的这种分离保证了您的代码不会在每次定义新角色时发生变化。例如,以下是 Controller 中访问控制的简单程度:
    class DocumentController [...]
    filter_access_to :display, :require => :read
    def display
    ...
    end
    end

    在 View 内部:
    <html> [...]
    <% permitted_to?(:create, :documents) do %>
    <%= link_to 'New', new_document_path %>
    <% end %>
    </html>

    Steffen 的插件还允许对象级(即行级)访问控制。例如,您可能想要定义一个角色,例如“document_author”,并赋予它“文档”的“管理”权限,但是 仅限 如果用户是文档的作者。该规则的声明可能如下所示:
    role :document_author do
    has_permission.on :documents do
    to :manage
    if_attribute :author => is {user}
    end
    end

    这里的所有都是它的!您现在可以像这样获取允许用户更新的所有文档:
    Document.with_permissions_to(:update)

    由于“管理”权限包括“更新”权限,这将返回作者为当前用户的文档列表。

    当然,并非每个应用程序都需要这种级别的灵 active ……但您可能需要。

    关于security - 资源列表授权的最佳实践是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/170606/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com