2016-12-02 1 views

Répondre

0

1er chemin

politique Pundit est pur code Ruby, donc si vous ne voulez pas conserver le code dans la base de données et d'évaluer de façon dynamique, je dirais que la réponse est non. C'est dangereux. Vous pouvez essayer, cependant.

2ème voie

Mais rien ne vous empêche de créer le modèle qui maintient les règles en JSON simples et de les comparer en utilisant Pundit, par exemple:

class PostPolicy < ApplicationPolicy 
    def update? 
    access_setting = PolicySetting.find_by(key: self.class_name) 
    user.role.in?(access_setting['roles']) 
    end 
end 

Bien sûr, la complexité et la flexibilité de l'outil directement dépend les uns des autres.

3ème voie

est un travail juste. Vous pouvez définir votre projet d'autorisation en dehors de celui principal, de sorte qu'il se déploie (zéro temps d'arrêt, bien sûr) n'affecterait pas le grand projet principal.

4ème façon

Créez votre propre DSL à stocker dans la base de données

5 manière

Utilisez quelque chose comme json-logic-ruby pour stocker la logique dans la base