1

我有帖子,在提要中。

为了能够查看提要中的帖子,必须在提要中。

在我的路线中,帖子嵌套在提要下。

在我的 PostsController 中,我有:

class Api::V1::PostsController < ApiController
  load_resource :network, find_by: :external_id, only: [:index, :create]
  load_resource :post, :through => :network, only: [:create]

  load_resource find_by: :external_id, except: [:create]

  authorize_resource

  def index
    @posts = @network.posts.page(params.has_key?(:page) ? params[:page] : 1).per(15)

  render status: 200,
           json: @posts
  end

对应能力:

can [:index, :create], Post do |post|
      user.in_feed? post.feed_id
end

出于某种原因,所有用户都通过了授权。我将如何解决这个问题?

4

1 回答 1

0

这是 CanCanCan 的预期行为。从有关使用块定义能力的文档中:

仅当存在实际实例对象时才评估该块。在检查类的权限时(例如在 index 操作中),它不会被评估。

index由于或操作都不存在实例create,因此该块永远不会运行。你要

can [:create, :index], Post if user.in_feed? post.feed_id
于 2014-11-06T22:47:16.343 回答