4

J'utilise CanCan pour vérifier les permissions des utilisateurs et afficher ou supprimer le contenu des pages de façon conditionnelle pour mes utilisateurs. Je veux mettre en cache mes pages bien, et même avec la mise en cache de fragment ne peut pas trouver une solution élégante ... par exemple:Rails - mise en cache et vues basées sur les permissions

cache do 

# much code 

    if can? 
    # little code 
    else 
    # little code 

# much code 

    if can? 
    # little code 
    else 
    # little code 

# much code 

Certes, je ne suis pas seul et il y a une bonne façon de le faire. Qu'est-ce qui est généralement considéré comme la meilleure pratique ici?

Merci beaucoup pour votre contribution.

Répondre

4

Je n'ai pas encore essayé, mais je le ferai probablement bientôt. Une approche que je suis susceptible de prendre est d'attribuer explicitement une clé de cache basée sur les modèles pertinents et sur l'utilisateur actuel. Le fragment sera mis en cache séparément pour chaque utilisateur, mais seulement une fois par utilisateur.

Essayez une variation sur ce point:

cache ["Unique fragment label", @model.cache_key, current_user.cache_key].join do 
    # code with and without permissioned elements 
end 

Pour faire en sorte que les changements d'autorisation invalident le cache, assurez-vous que ces changements touchent l'horodatage updated_at du modèle de l'utilisateur. En supposant que les autorisations sont stockées dans un modèle distinct:

class Permission < ActiveRecord::Base 
    belongs_to :user, :touch => true 
end 
Questions connexes