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
操作中取消注释该行,否则这对我无效。
答案 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