0

我在 Rails 中有一个多对多的关系,一个用户拥有并属于许多 user_types,反之亦然。那么 user_type 有很多角色。

role_fruits 表的示例表:

role_id:1,fruit_id:6

角色表示例:

id:1,姓名:Bannana Worker

用户示例表:

id:1,用户名:employee143

水果表示例:

id: 6, name: 香蕉

在模型中

用户.rb

has_and_belongs_to_many :roles

角色.rb

has_and_belongs_to_many :users

现在,我想要完成的是让具有“Bannana Worker”(id 1)角色的用户能够访问它,而没有它的用​​户则不能进入它。

伪代码看起来像这样:

如果 user.roles 包含水果 id 然后可以:管理,水果

我怎样才能用 cancan 完成这个,如果不可能,什么是好的替代宝石?

4

1 回答 1

1

尝试这样的事情ability.rb

can :manage Fruit do |fruit|
  user.roles.exists?(fruit.id)
end

在你的控制器中你可以做

def your_action
  @fruit = ...

  authorize! :manage, @fruit

  #  ...
end
于 2012-08-10T19:41:04.470 回答