0
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

4

2 回答 2

1

如果使用受支持的 ORM(包括 ActiveRecord)并在没有块的情况下定义您的能力,CanCanCan 会从版本 1.4 开始加载索引操作的实例变量。

如您所述,在以前的版本中,load_and_authorize_resource仅为那些带有:id参数的路由加载单个实例变量,即 CRUD 操作。但是,它确实为所有操作授权,但由于它不为索引操作加载实例变量,它仅根据模型进行授权。这意味着它会忽略该模型的能力中的任何条件。

于 2015-08-11T20:10:48.127 回答
1

索引动作

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

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

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

于 2016-01-30T07:51:33.797 回答