如何理解康康康gem的load_resource和authorize_resource方法?

How to understand load_resource and authorize_resource methods of cancancan gem?

我在 rails 应用程序中使用 cancancan gem。但是我不太清楚 load_and_authorize_resource 方法的含义。我知道这与调用 load_resourceauthorize_resource.

相同

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

对于某些动作(非RESTful动作),它们与模型没有关系,所以我不需要获取实例,对于这种情况,authorize_resource如何工作通常?

任何想法都非常感谢!提前致谢!

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_resourceload_resource 也执行您手动执行的相同操作。它只是给所有的动作加一个before_action,然后根据id.

找对象

load_resource 将始终为您提供与 Model 同名的实例变量,因此如果您在视图中为您的对象使用不同的东西,那么它也无济于事.因此,选择一个选项将取决于您和您的代码。

Cancancan 维基:

As of CanCan 1.5 you can use the skip_load_and_authorize_resource, skip_load_resource or skip_authorize_resource methods to skip any of the applied behaviour and specify specific actions like in a before filter.

希望这对您有所帮助。