无法使用Pundit授权嵌套资源

时间:2015-05-21 03:03:09

标签: ruby-on-rails nested authorization pundit

这是我的问题。我有多个用户,每个用户都有多个订阅,我想用Pundit授权订阅索引方法。 我的 routes.rb

resources :users do
   resources : subscriptions
end

假设我是id 1 的用户。我需要的是在我打开/users/1/subscriptions时获取订阅列表,当我打开/user/2/subscriptions

时获取Pundit访问错误

这是我的subscriptions_controller.rb

SubscriptionController < ApplicationController
    def index
        @user = User.find(params[:user_id])
        @subscriptions = @user.subscriptions

        authorize @subscriptions
    end
end

我可以authorize @user, :subscriptions_index,但为订阅身份验证编写用户策略感觉不对。我该如何处理这个问题?提前谢谢。

1 个答案:

答案 0 :(得分:0)

这应该适合你(可能不是最有效的):

class SubscriptionController < ApplicationController
  def index
    @user = User.find(params[:user_id])
    # this should either return the same or an empty association
    @subscriptions = @user.subscriptions
    authorize @subscriptions
  end
end

class SubscriptionPolicy < ApplicationPolicy
  def index?
    # asking if all subscriptions have the current_user id as the user_id
    record.all? {|sub| sub.user_id == user.id }         
  end
end