Ruby - Rails 4 - Pundit - 路由#index_fr 的策略和授权错误?

Posted

技术标签:

【中文标题】Ruby - Rails 4 - Pundit - 路由#index_fr 的策略和授权错误?【英文标题】:Ruby - Rails 4 - Pundit - Policy and authorization error for a route #index_fr? 【发布时间】:2016-10-26 10:15:52 【问题描述】:

抱歉,我没有看到其他地方可以询问有关 Pundit 的问题...谢谢您的帮助。

我正在开发 Ruby on rails API,我想创建一个 url (.../api/v1/attractions/fr) 列出有关我的一个模型的一些信息。但我从 Pundit 收到了这条错误消息:

Pundit::AuthorizationNotPerformedError 在 /api/v1/attractions/fr Api::V1::AttractionsController

lib/pundit.rb 文件中 verify_authorized 的此错误

def verify_authorized
    raise AuthorizationNotPerformedError, self.class unless pundit_policy_authorized?
end

这是我的配置:

# app/config/routes.rb

namespace :api, defaults:  format: :json  do
    namespace :v1 do
      resources :lines, only: [ :index, :show ] do
        collection do
          get '/fr', to: 'attractions#index_fr'
        end
      end
   end
end

# app/controllers/api/v1/attractions_controller.rb

class Api::V1::AttractionsController < Api::V1::BaseController
skip_before_action :authenticate_user!

  def index
    @attractions = policy_scope(Attraction)
    @attractions = Attraction.all
  end

  def index_fr
    @attractions = policy_scope(Attraction)
    @attractions = Attraction.all
  end
end

# app/policies/application_policy.rb

class ApplicationPolicy
  attr_reader :user, :record

  def initialize(user, record)
    @user = user
    @record = record
  end

  def index?
    false
  end

  def index_fr?
    false
  end

  def create?
    false
  end

  def new?
    create?
  end

  def update?
    false
  end

  def edit?
    update?
  end

  def destroy?
    false
  end

  def scope
    Pundit.policy_scope!(user, record.class)
  end

  class Scope
    attr_reader :user, :scope

    def initialize(user, scope)
      @user = user
      @scope = scope
    end

    def resolve
      scope
    end
  end
end
end

【问题讨论】:

【参考方案1】:

尝试将before_filter :skip_authorization 添加到您的 api 控制器。

但是,只有当您将其添加为 after_action 时,才应调用权威人士 verify_authorized 方法。

【讨论】:

以上是关于Ruby - Rails 4 - Pundit - 路由#index_fr 的策略和授权错误?的主要内容,如果未能解决你的问题,请参考以下文章

Rails 4 with Pundit & Statesman gem - 对象处于状态时的策略

Rails 6 - Pundit“策略包装器”

Rails 5,具有命名空间资源的Pundit

Ruby Pundit 授权用户和合作者

ruby学习笔记

Pundit gem 错误类覆盖我在 ruby​​ 中的自定义错误类