首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何理解癌症宝石的load_resource和authorize_resource方法?

如何理解癌症宝石的load_resource和authorize_resource方法?
EN

Stack Overflow用户
提问于 2016-03-18 03:16:47
回答 1查看 8.5K关注 0票数 2

我在我的rails应用程序中使用cancancan宝石。但我不太清楚load_and_authorize_resource方法的含义。我知道这和调用load_resourceauthorize_resource是一样的。

load_resource将创建模型的新实例,或通过params[:id]获取实例或实例集合,然后authorize_resource方法将使用这些实例来授权。但是,如果在每个控制器操作中已经有一个Model.find(params[:id])Model.new,是否需要添加load_resource方法?

对于一些操作(非RESTful操作),它们与模型没有关系,所以我不需要得到一个实例,对于这种情况,authorize_resource如何正常工作?

任何想法都是感激的!提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-18 03:54:29

load_and_authorize_resource为每个操作设置一个before_filter,以便将资源加载到实例变量并自动授权它。因此,这对于RESTful操作非常有用。现在,如果在同一个控制器中有非RESTful操作(无法加载资源),则可以:

代码语言:javascript
复制
load_and_authorize_resource only: [:index, :show]

代码语言:javascript
复制
skip_load_resource only: :new

这将跳过这些操作的before_filter

如果控制器中有Model.find(params[:id]),则可以删除它或只需使用:

代码语言:javascript
复制
authorize_resource

对于这些操作,您不需要load_resourceload_resource还执行与您手动完成的相同的操作。它只是在所有操作中添加一个before_action,并根据id查找对象。

load_resource将始终为您提供相同名称的Model实例变量,因此,如果您在视图中为对象使用了不同的东西,那么它也不会有帮助。因此,选择选项将取决于您和您的代码。

Cancancan:

从CanCan 1.5开始,您可以使用skip_load_and_authorize_resourceskip_load_resourceskip_authorize_resource方法跳过任何已应用的行为,并指定特定的操作,比如在前置筛选器中。

希望这能有所帮助。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36075500

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档