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 的策略和授权错误?的主要内容,如果未能解决你的问题,请参考以下文章