具有多个科目(班级)的Ruby CanCan能力?

时间:2015-09-09 09:50:29

标签: ruby-on-rails cancan

如何让多个科目达到康康的能力?

我想将能力定义为:

can :change_role, Project, Document  do |prj, doc|
   # my logic here
   ..
end

所以我这样检查一下:

prj1 = Project.find(10)
doc1 = Document.find(...)

user.can? :change_role, prj1,  doc1 

它不起作用。

但Cancan只允许这样:

can :read, Project do |prj|
  ..
end

user.can? :read, prj1

我应该创建我的代理类来存储两个主题并将其传递给能力吗?

如何添加多个班级/科目的能力?

1 个答案:

答案 0 :(得分:1)

这样做:

user.can? :change_role, [prj1, doc1]

定义能力:

can :change_role, Array do |p|
  prj = p[0]
  doc = p[1]
  ...
end