Cancan授权嵌套资源中的控制器操作

时间:2011-10-15 00:30:22

标签: ruby ruby-on-rails-3 cancan

使用CanCan中的load_and_authorize_resource,您可以使用:only:except选择授权的操作。即load_and_authorize_resource :only => [:index, :show]

我想在嵌套资源中做同样的事情,但无法让它工作。

我有一个嵌套资源,如:

class TasksController < ApplicationController
  load_and_authorize_resource :project
  load_and_authorize_resource :task, :through => :project
end

并试图限制“:点击”操作:

class TasksController < ApplicationController
  load_and_authorize_resource :project
  load_and_authorize_resource :task, :through => :project, :except => :click
end

但这不起作用。任何想法如何使用嵌套资源选择某些操作?

1 个答案:

答案 0 :(得分:3)

here

要跳过嵌套控制器skip_authorize_resource上的操作的授权,需要按以下方式使用。

class TasksController < ApplicationController
  load_and_authorize_resource :project
  load_and_authorize_resource :through => :project

  skip_authorize_resource :only => :click  
  skip_authorize_resource :project, :only => :click
end

第一个skip_authorize_resource跳过任务的授权检查,第二个跳过项目的授权检查。如果您想跳过对操作的所有授权检查,则需要两者。