Rails 4 - cancancan - 定义能力

Rails 4 - cancancan - defining abilities

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

例如,我有名为项目和项目问题的模型。

我想允许 class 用户阅读项目,然后如果他们可以阅读项目,那么他们可以创建项目问题。

我将用户阅读项目的权限定义为:

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 的另一个问题的重复,它在通过引用数据库中的属性来表达能力方面寻求语法方面的帮助。

假设存在 has_many/belongs_to 类型的关联,您可以通过以下方式轻松完成:

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

请注意,在检查能力之前,您必须将 project_id 分配给新的 project_question。

所以在你的controller/views你不能做

can? :create, ProjectQuestion.new

因为它总是 return 错误。您将需要做的是:

can? :create, some_project.project_questions.new