CanCanCan gem:load_and_authorize_resource和控制器的索引操作

时间:2015-08-11 19:42:05

标签: ruby-on-rails authorization cancan cancancan

class TopicsController < ApplicationController
  load_and_authorize_resource # CanCanCan gem

  def index
    # @topics = Topic.visible_to(current_user)
  end
...
end

据我了解,load_and_authorize_resource为CRUD操作加载了必要的模型实例。这不包括controller#index操作(实例变量是复数 - 在我的情况下是@topics)吗?

除非我在index操作中取消注释该行,否则这对我无效。

2 个答案:

答案 0 :(得分:1)

如果使用支持的ORM(包括ActiveRecord)并定义没有块的能力,CanCanCan会为索引操作starting in version 1.4加载实例变量。

在以前的版本中,:id仅为具有{{1}}参数的路由加载单数实例变量,即CRUD操作,如您所述。但是,它确实授权所有操作,但由于它没有为索引操作加载实例变量,因此它只根据模型进行授权。这意味着它忽略了该模型能力的任何条件。

答案 1 :(得分:0)

索引操作

从1.4开始,索引操作将使用accessible_by加载集合资源。

def index
  # @products automatically set to Product.accessible_by(current_ability)
end

通过https://github.com/ryanb/cancan/wiki/authorizing-controller-actions#load_resource