0

是否可以通过引用另一个能力来定义 CanCanCan 能力?

例如,我有名为 Project 和 Project Question 的模型。

我想让一类用户阅读项目,然后如果他们可以阅读项目,那么他们就可以创建项目问题。

我已将用户阅读项目的能力定义为:

can :read, Project, 
      {:active => true, 
       :closed => false,
       :sweep => { :disclosure => { :allusers => true }}
      } 

现在我想定义创建项目问题的能力。我想知道你是否可以这样说:

if can :read, Project, can :create, ProjectQuestion

我也试过:

can [:create, :read], ProjectQuestion do |pq3|
        if can :read Project 
        end

是否可以通过参考另一种能力来定义一种能力?

PS:这不是我关于 cancancan 的另一个问题的重复,它通过引用数据库中的属性来寻求语法帮助来表达能力。

4

1 回答 1

0

假设有 has_many/belongs_to 类型的关联,您可以轻松地这样做:

can [:create, :read], ProjectQuestion do |project_question|
  can? :read, project_question.project
end

请注意,在检查功能之前,您必须为新的 project_question 分配一个 project_id。

所以在你的控制器/视图中你不能做

can? :create, ProjectQuestion.new

因为它总是返回假。你将不得不做:

can? :create, some_project.project_questions.new
于 2015-09-07T08:58:08.027 回答