Cancan的load_and_authorize_resource中如何自定义实例变量名?

3

users_controller.rb

class UsersController < ApplicationController  
  def index
    @objects = User.filter(params: params)
  end
end  

问题1 > 如果调用了'load_and_authorize_resource',它将加载哪个实例变量?
问题2 > 如果它加载@user或@users,那么如何使其加载@object?

我认为我对cancan缺乏足够的了解(我是一个rails新手),并且自从4天前开始使用它,希望这个问题有意义。

3个回答

2
如果实例变量已经设置,资源就不会被加载。这使得可以通过在某些操作上使用before_filter轻松地覆盖行为 - 参见cancan https://github.com/ryanb/cancan/blob/master/lib/cancan/controller_additions.rb第34和35行的代码,因此您可以在控制器中像这样编写代码 -
before_filter :set_instance_variable  
load_and_authorize_resource  
private  
  def set_instance_variable
    @object = "blah blah blah"  
  end  

在设置实例变量之后调用load_and_authorize_resource,即在'before_filter :set_instance_variable'之后调用。


非常感谢您提供的解决方案。 - codemilan

2

问题1:在您的示例中,它将是@user/@users。

问题2:使用instance_name属性,例如,要加载@object,请执行以下操作:

load_and_authorize_resource instance_name: :object

1

问题1:对于UsersController,它将是@user。

问题2:如果您有正确的路由,您可以使用。

load_and_authorize_resource :custom_model_name

此外,https://github.com/CanCanCommunity/cancancan对您会有所帮助。


谢谢Alex,我知道问题所在了。 - codemilan

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接