多租户应用程序是否有任何授权gems /示例?
我看了CanCan和CanTango,但我无法找到我想要的东西。
我的应用有帐户,用户,关系模型。关系模型具有relationship_type
列,用于确定授权级别。它的值可以是owner
,moderator
,editor
,将来可能更多。用户可以拥有/审核多个帐户,一个帐户可以拥有许多所有者/版主。
我找到的所有示例都描述了单个租户应用程序,而我的应用程序的授权必须通过正在查看的当前帐户确定范围。例如,用户可以是一个帐户的访客,也可以是另一个帐户的所有者。
我开始认为我的关系模型设计不好,可能有缺点,但我不确定什么是更好的选择。
答案 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。