2011-01-19 6 views
2

Mongoidを使用すると、アカウントモデルがあり、そのアカウントに特定のロールを割り当てたい場合は、アカウント、ユーザー内で関係を埋め込むか、役割の名前?mongoidを使用したスコープ付きロール

アカウントのすべてのユーザーを返信し、現在のユーザーがCancanのようなものでアカウントにアクセスできるようにしたいと考えています。

アカウントを構成するための推奨方法は何ですか< - >ユーザー役割ベースの関係?ユーザは、Basecampの仕組みと同様に、潜在的に異なる役割を持つ複数のアカウントに属している可能性があります。

答えて

6

私は最近、これを正確に実装しました。少し複雑ですが。

は、私は、ユーザー

class User 
    include Mongoid::Document 
    embeds_many :roles 
end 

class Role 
    include Mongoid::Document 

    field :kind, :type => Symbol 
    field :account_id, :type => BSON::ObjectId 
    embedded_in :users, :inverse_of => :roles 
end 

class Account 
    include Mongoid::Document 
end 

#adding a role to user 
account = Account.create 
user = User.create 
user.roles.create(:kind => :admin, :account_id => account.id) 

#all users of an account 
User.where("roles.account_id" => account.id) 

#users accounts 
Account.where(:_id => user.roles.map(&:account_id)) 

#in cancan ability 
can :access, Account, :_id => user.roles.map(&:account_id) 

で役割を埋め込むたんでした私は何も働いaccessible_byカンカンクエリを持っていたが、それはそれが仕事を得るためにmongoidためにいくつかの改造が必要でした。

希望するものは です(注:ここにこのコードを書き込んだので、実行されているかどうかわかりません)

関連する問題