我在我的rails应用程序中使用cancancan宝石。但我不太清楚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如何正常工作?
任何想法都是感激的!提前感谢!
发布于 2016-03-18 03:54:29
load_and_authorize_resource为每个操作设置一个before_filter,以便将资源加载到实例变量并自动授权它。因此,这对于RESTful操作非常有用。现在,如果在同一个控制器中有非RESTful操作(无法加载资源),则可以:
load_and_authorize_resource only: [:index, :show]或
skip_load_resource only: :new这将跳过这些操作的before_filter。
如果控制器中有Model.find(params[:id]),则可以删除它或只需使用:
authorize_resource对于这些操作,您不需要load_resource。load_resource还执行与您手动完成的相同的操作。它只是在所有操作中添加一个before_action,并根据id查找对象。
load_resource将始终为您提供相同名称的Model实例变量,因此,如果您在视图中为对象使用了不同的东西,那么它也不会有帮助。因此,选择选项将取决于您和您的代码。
Cancancan:
从CanCan 1.5开始,您可以使用
skip_load_and_authorize_resource、skip_load_resource或skip_authorize_resource方法跳过任何已应用的行为,并指定特定的操作,比如在前置筛选器中。
希望这能有所帮助。
https://stackoverflow.com/questions/36075500
复制相似问题