2016-10-26 2 views
0

Désolé, je n'ai pas vu une autre place pour poser une question à propos de Pundit ... Merci pour votre aide.Ruby - Rails 4 - Pundit - Erreur de politique et d'autorisation pour un itinéraire #index_fr?

Je travaille sur une API Ruby on rails et je voudrais créer une url (.../api/v1/attractions/fr) liste quelques informations sur un de mes modèles. Mais je l'ai reçu ce message d'erreur Pundit:

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

et cette erreur pour verify_authorized dans le fichier lib/pundit.rb

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

Voici ma configuration:

# 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 

Répondre

0

Essayez d'ajouter before_filter :skip_authorization à votre contrôleur api.

Toutefois, la méthode pundit verify_authorized ne doit être appelée que si vous l'avez ajoutée en tant que after_action.