CanCan可以通过id进行授权

时间:2012-08-10 19:32:01

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

我在rails中有多对多关系,用户拥有并属于许多user_types,反之亦然。然后user_type有很多角色。

roles_fruits表的示例表:

  

role_id:1,fruit_id:6

角色表示例:

  

id:1,姓名:Bannana Worker

用户示例表:

  

id:1,user_name:employee143

水果表示例:

  

id:6,姓名:bananna

在模型中

user.rb

has_and_belongs_to_many :roles

roles.rb

has_and_belongs_to_many :users

现在,我想要实现的是允许具有“Bannana Worker”(id 1)角色的用户能够访问它以及没有它的用​​户,而不是能够进入它。

Pseudocode看起来像这样:

如果user.roles包含水果ID,则可以:manage,fruit

如何用cancan实现这一目标,如果不可能,那么什么是一个好的替代宝石?

1 个答案:

答案 0 :(得分:1)

ability.rb

中尝试这样的事情
can :manage Fruit do |fruit|
  user.roles.exists?(fruit.id)
end

在控制器中你可以做到

def your_action
  @fruit = ...

  authorize! :manage, @fruit

  #  ...
end