【问题标题】:Authorization gem for a multi-tenancy application?多租户应用程序的授权宝石?
【发布时间】:2012-03-06 01:47:20
【问题描述】:

是否有任何多租户应用程序的授权宝石/示例?

我查看了 CanCan 和 CanTango,但找不到我要查找的内容。

我的应用具有帐户、用户、关系模型。关系模型有一个确定授权级别的relationship_type 列。它的值可以是ownermoderatoreditor,未来可能更多。用户可以拥有/管理多个帐户,一个帐户可以有多个所有者/管理员。

我发现的所有示例都描述了单个租户应用程序,而我的应用程序的授权必须通过正在查看的当前帐户来限定范围。例如,用户可以是一个帐户的访客和另一个帐户的所有者。

我开始认为我的关系模型设计不佳,可能有缺点,但我不确定什么是更好的选择。

【问题讨论】:

    标签: ruby-on-rails ruby ruby-on-rails-3 authorization


    【解决方案1】:

    CanCan 确实可以处理这个问题,因为它允许您定义任意规则。您的能力文件可能如下所示:

    def initialize(user)
    
      can :read, BlogPost do |blog_post|
        blog_post.account == user.account and user.relationship.in?([:owner, :moderator])
      end
    
    end
    

    【讨论】:

      【解决方案2】:

      试试declarative_authorization,授权规则是使用 DSL 在单个 Ruby 文件中定义的,您当然可以根据对象的属性和用户角色定义高级规则。

      比如你可以这样说

      role :moderator
        has_permission_on :accounts do
          to :manage
          if_attribute :moderators contains {user}
        end
      end
      

      declarative_authorization 提供了几种可以在模型/控制器/视图中使用的方法,例如在帐户视图中,您可以使用以下方法:

      <% permitted_to? :update, @account do %>
        <%= link_to 'Edit account', edit_account_path(@account) %>
      <% end %>
      

      您可以查看文档和RailsCasts episode

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-11
        • 1970-01-01
        • 2017-10-10
        • 1970-01-01
        • 2021-01-06
        • 1970-01-01
        相关资源
        最近更新 更多