多租户应用程序的授权gem?

时间:2012-03-05 16:58:14

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

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

我看了CanCan和CanTango,但我无法找到我想要的东西。

我的应用有帐户,用户,关系模型。关系模型具有relationship_type列,用于确定授权级别。它的值可以是ownermoderatoreditor,将来可能更多。用户可以拥有/审核多个帐户,一个帐户可以拥有许多所有者/版主。

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

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

2 个答案:

答案 0 :(得分:3)

CanCan确实可以解决这个问题,因为它可以让你定义任意的ruls。您的能力文件可能如下所示:

def initialize(user)

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

end

答案 1 :(得分:1)

尝试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