我用我的Rails应用程序的cancancan宝石。 但我不是为的含义清晰得多load_and_authorize_resource
方法。 我知道这是与调用load_resource
和authorize_resource
。
load_resource
将创建模型的新实例,或者得到一个实例params[:id]
,或实例的集合,然后authorize_resource
方法将使用这些实例来授权。 但是,如果我已经有一个Model.find(params[:id])
或Model.new
在每个控制器动作,剂量我需要添加load_resource
方法?
对于一些行动(非REST风格的动作),他们没有与模型的关系,所以我并不需要一个实例,针对这种情况, authorize_resource
如何正常工作?
任何想法是赞赏! 提前致谢!
所述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_resource
, skip_load_resource
或skip_authorize_resource
方法过滤器之前跳过任何应用的行为,并指定类似的具体行动中。
希望这可以帮助。
文章来源: How to understand load_resource and authorize_resource methods of cancancan gem?