如何理解康康康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_resource
和 authorize_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_resource
。 load_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.
希望这对您有所帮助。
我在 rails 应用程序中使用 cancancan gem。但是我不太清楚 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
如何工作通常?
任何想法都非常感谢!提前致谢!
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 维基:
As of CanCan 1.5 you can use the
skip_load_and_authorize_resource
,skip_load_resource
orskip_authorize_resource
methods to skip any of the applied behaviour and specify specific actions like in a before filter.
希望这对您有所帮助。