如何理解cancancan宝石load_resource和authorize_resource方法呢

2019-09-29 02:32发布

我用我的Rails应用程序的cancancan宝石。 但我不是为的含义清晰得多load_and_authorize_resource方法。 我知道这是与调用load_resourceauthorize_resource

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

对于一些行动(非REST风格的动作),他们没有与模型的关系,所以我并不需要一个实例,针对这种情况, authorize_resource如何正常工作?

任何想法是赞赏! 提前致谢!

Answer 1:

所述load_and_authorize_resource设定before_filter每个动作到资源加载到一个实例变量,并自动进行授权。 因此,这是REST风格的操作时非常有用。 现在,如果你在同一个控制器非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维基:

作为惨惨1.5,你可以使用skip_load_and_authorize_resourceskip_load_resourceskip_authorize_resource方法过滤器之前跳过任何应用的行为,并指定类似的具体行动中。

希望这可以帮助。



文章来源: How to understand load_resource and authorize_resource methods of cancancan gem?