【问题标题】:Rails 3 company account with many users, restrict access to dataRails 3公司帐户有很多用户,限制对数据的访问
【发布时间】:2011-10-03 01:45:10
【问题描述】:

我想知道在我的应用中构建身份验证/授权的最佳方式。我想拥有

  • 许多公司帐户,可能使用子域

  • 帐户有很多用户

  • 并且用户只能访问由他们自己或具有相同帐户的其他用户创建的记录。

我所做的研究提供了许多混合搭配的想法,以奇怪而美妙的方式组合 devise / cancan / authlogic,但我还没有找到任何可以向我展示限制用户访问数据的最佳方法的东西在同一模型内。

例如:


账户 1:欧亚大陆

用户 1:鲍勃

用户 2:吉姆


帐号 2:东亚

用户 1:戴夫

用户 2:艾伦


Isbn 1:account_id 为 1

Isbn 2:account_id 为 2


我如何确保 Bob 无法访问或删除 Isbn 2?

///更新 当然,现在我已经发布了这个,我的 google fu 已经启动,我从 RyanB 找到了 CanCan 2.0 的自述文件,看起来很完美:

> 资源

如果您需要根据模型的授权更改授权怎么办? 属性?您可以通过传递条件哈希作为最后一个 可以的论据。例如,如果您只想允许一个人访问 他拥有的项目你可以设置 :user_id 选项。

【问题讨论】:

    标签: ruby-on-rails authorization access-control user-permissions


    【解决方案1】:

    您看过 XACML 吗?它是一个基于策略的声明性授权框架。它也是 OASIS 的标准。

    使用 XACML,您可以获取所需的任何属性(用户、资源、操作或上下文属性)并表达您拥有的用例。

    你最初的要求是

    用户只能访问由他们自己或具有相同帐户的其他用户创建的记录。

    在 XACML 中将成为以下策略:

    当且仅当 record.owner==user.id 或 user.accountId==record.accountId

    就是这样! XACML 的架构定义了策略执行点 (PEP),它是保护您的应用程序/数据并将授权请求发送到策略决策点 (PDP) 的组件。 PEP 说:“Alice 可以访问记录 #123 吗?” PDP 检查 Alice 的帐户 ID 和记录的帐户 ID 以及所有者。 PDP 最终会返回“Permit”或“Deny”。

    HTH

    【讨论】:

      【解决方案2】:

      我建议使用CanCan 进行授权。

      你的能力模型看起来像

      can :manage, :isbn do |isbn|
        isbn.account == current_user.account
      end
      

      然后您可以在控制器/视图中使用can? :manage, @post 之类的条件。

      【讨论】:

      • 啊,对,ta。所以 Isbn 中会有一个 account 属性,如果当前用户 == 1,则该用户可以访问该记录。我说对了吗?这似乎好得令人难以置信!
      • 嗯,我没有与 CanCan 合作那么多。很好,可能会在我的下一个项目中检查它:)
      【解决方案3】:

      你应该看看https://github.com/stffn/declarative_authorization我认为它完全按照你的要求去做(你可以限制对某些记录的访问)

      因此,在您的示例中,您可以使用以下方式设置授权:

      has_permission_on :isbn do 
          to :manage
          if_attribute :account_id => is_in {user.account_ids}
      end
      

      【讨论】:

        猜你喜欢
        • 2018-03-15
        • 2017-12-04
        • 1970-01-01
        • 2019-08-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多