CanCan嵌套资源索引操作授权

时间:2014-11-06 22:08:24

标签: ruby-on-rails cancan cancancan

我有帖子,在Feed中。

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

在我的路线中,帖子嵌套在Feed中。

在我的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

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

1 个答案:

答案 0 :(得分:0)

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

  

仅在存在实际实例对象时评估该块。   在检查类的权限时(例如在   指数行动)。

由于indexcreate操作的实例不存在,因此该块永远不会运行。你想要

can [:create, :index], Post if user.in_feed? post.feed_id