Rails 4 - cancancan - 定义能力

时间:2015-09-07 04:52:46

标签: ruby-on-rails cancan cancancan

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

例如,我有一个名为Project and 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的另一个问题的重复,cancancan通过引用db中的属性来寻求表达能力的语法帮助。

1 个答案:

答案 0 :(得分:0)

假设有has_many / belongs_to类型的assciation你可以很容易地这样做:

can? :create, ProjectQuestion.new

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

所以在你的控制器/视图中你无法做到

can? :create, some_project.project_questions.new

因为它总是会返回false。你必须这样做:

yourScrollview.fullScroll(ScrollView.FOCUS_DOWN);