我在我的rails应用程序中使用cancancan gem。但我对load_and_authorize_resource
方法的含义并不十分清楚。我知道这与调用load_resource
和authorize_resource
相同。
load_resource
将创建模型的新实例,或者通过params[:id]
或实例集合获取实例,然后authorize_resource
方法将使用这些实例进行授权。但是,如果我在每个控制器操作中已经有Model.find(params[:id])
或Model.new
,那么我需要添加load_resource
方法?
对于某些操作(非RESTful操作),他们与模型没有关系,所以我不需要获取实例,对于这种情况,authorize_resource
如何正常工作?
任何想法都很感激!提前谢谢!
答案 0 :(得分:2)
load_and_authorize_resource
为每个操作设置before_filter
,以将资源加载到实例变量中并自动进行授权。因此,这对RESTful操作很有用。现在,如果您在同一个控制器中有非RESTful操作,无法加载资源,您可以执行以下操作:
load_and_authorize_resource only: [:index, :show]
OR
skip_load_resource only: :new
这将跳过before_filter
这些操作。
如果你在控制器中有Model.find(params[:id])
,你可以删除它或只使用:
authorize_resource
这些操作不需要load_resource
。 load_resource
也与您手动完成的操作相同。它只是为所有操作添加before_action
,并根据id
找到对象。
并且load_resource
将始终为您提供具有相同名称Model
的实例变量,因此如果您在视图中使用不同的对象,那么它也不会有帮助。因此,选择一个选项取决于您和您的代码。
Cancancan Wiki:
从CanCan 1.5开始,您可以使用
skip_load_and_authorize_resource
,skip_load_resource
或skip_authorize_resource
方法跳过任何应用的行为,并指定特定的操作,例如在过滤器之前。
希望这有帮助。