我有帖子,在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
出于某种原因,所有用户都通过了授权。我该如何解决这个问题?
答案 0 :(得分:0)
这是CanCanCan的预期行为。从关于使用块定义能力的文档:
仅在存在实际实例对象时评估该块。 在检查类的权限时(例如在 指数行动)。
由于index
或create
操作的实例不存在,因此该块永远不会运行。你想要
can [:create, :index], Post if user.in_feed? post.feed_id