2012-03-05 6 views
3

マルチテナントアプリケーションの認可宝石/例はありますか?マルチテナントアプリケーションの認可宝石ですか?

私はCanCanとCanTangoを見ましたが、私が探しているものを見つけることができませんでした。

アカウント、ユーザー、リレーションシップモデルがあります。関係モデルには、承認レベルを決定するrelationship_type列があります。その値は、owner,moderator,editorとなる可能性があります。ユーザーは多くのアカウントを所有/管理でき、アカウントには多くの所有者/モデレーターがいることができます。

私が見つけたすべての例では、1つのテナントアプリケーションが記載されていますが、私のアプリの権限は現在表示されているアカウントで範囲を限定する必要があります。ユーザーは、たとえば、あるアカウントのゲストと別のアカウントの所有者となります。

私のリレーションシップモデルは悪いデザインであり、欠点があると思うようになっていますが、何が良い選択肢なのかよくわかりません。

答えて

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

は承認規則は、DSLを使用して、単一のRubyファイルで定義されている、あなたは、オブジェクトの属性上、コースのユーザーの役割に基づいた高度なルールを定義することができ、declarative_authorization試してみてください。

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

たとえば、あなたがのようなものを使用することができ、アカウントビューで、たとえば、モデル/コントローラ/ビューで使用することができます。この

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

declarative_authorizationのようなものはいくつかの方法を提供すると言うことができます

ドキュメントとRailsCasts episodeをご覧ください。