使用mongoid的角色

时间:2011-01-19 05:05:20

标签: ruby-on-rails ruby-on-rails-3 mongodb mongoid cancan

使用Mongoid,如果我有一个帐户模型,并希望将具有特定角色的用户分配给该帐户,最好是将该关系嵌入帐户,用户还是创建角色集合映射帐户到具有角色名称的用户?

我希望能够返回帐户的所有用户,并验证当前用户是否可以使用Cancan等帐户访问该帐户。

构建帐户的建议方法是什么< - >基于用户角色的关系?用户可能属于可能具有不同角色的多个帐户,类似于Basecamp的工作方式。

1 个答案:

答案 0 :(得分: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)

我也可以使用cancan查询access_by,但它需要一些mod来使mongoid能够工作。

希望有所帮助 (注意:我刚刚在这里编写了这段代码,所以不确定它是否运行)