2016-10-25 2 views
2

Je suis créé nouvelle application de rails et je veux limiter les actions de l'utilisateur basé sur une seule condition comme dossier peut être modifiable par le propriétaire (created_by) et le sous-propriétaire (ajouté par le propriétaire). J'ai des modèles comme App, utilisateur et contrôleur comme AppController. Dans AppController, j'ai plus d'une action comme index, créer, afficher, mettre à jour, supprimer. J'ai une politique comme AppPolicy. Ici, j'ai besoin de créer une seule méthode pour vérifier toutes les actions, mais par défaut, chaque action nécessite une autre méthode comme action_name? dans la classe de politique.Est-il possible d'utiliser une méthode unique pour autoriser l'action de plusieurs contrôleurs dans Rails Pundit?

Exemple

Code existant:

class AppPolicy < ApplicationPolicy 
    class Scope < Scope 
    def resolve 
    scope 
    end 
end 

def action1? 
    record.users.include? (user) 
end 

def action2? 
    record.users.include? (user) 
end 

def action3? 
    record.users.include? (user) 
end 

end 

De code ci-dessus, nous pouvons voir une même condition réside dans toutes les méthodes. Je dois utiliser une seule méthode pour vérifier action1, action2, action3. Je ne sais pas ce qui est possible ou pas dans Pundit.

Répondre

-3

Vous pouvez utiliser cancan (ou cancancan) joyau rubygems link

Vous pouvez créer le fichier de configuration de capacité avec

rails g cancan:ability 

La méthode authorize! dans votre contrôleur déclenche une exception si l'utilisateur ne peut pas effectuer l'action donnée, appelez-le donc sur before_action rappel.

Documentation here

+1

ce conseil fait peu à aucun sens et même pas une réponse, car OP utilise Pundit. –