2010-04-30 6 views
1

J'ai implémenté l'authentification avec Authlogic et l'autorisation avec Acl9. Maintenant, j'essaie d'éviter plusieurs hits à la base de données pour vérifier si l'utilisateur est administrateur en gardant cela dans la session.Rails - Mise en cache ACL9 en session

Ce que je pensais que ce code devrait fonctionner:

class ApplicationController < ActionController::Base 
    ... 
    helper_method :current_user_session, :current_user, :is_admin 
    ... 

    private 
    def is_admin 
     return current_user_session[:is_admin] if defined?(current_user_session[:is_admin]) 
     current_user_session[:is_admin] = current_user.has_role?(:admin) 
    end 

Donc, fondamentalement, sur un premier appel à is_admin méthode d'assistance, il faut ajouter une valeur booléenne à session[:is_admin] et pour toutes les autres appels, prendre de la session. Mais je reçois cette erreur:

undefined method `[]=' for #<UserSession: {:unauthorized_record=>"<protected>"}> 

Et je suis resté ici. Qu'est-ce que je fais mal?

Répondre

1

J'ai dû utiliser session [] au lieu de current_user_session []. Ce code fonctionne comme charme:

(ApplicationController)

helper_method :current_user_session, :current_user, :is_admin? 
    ... 
def is_admin? 
    return session[:is_admin] if !session[:is_admin].nil? 
    session[:is_admin] = current_user.has_role?(:admin) 
end 

(vue modèle)

<% if is_admin? -%> 
... 

Il cache rôle d'administrateur en session sur une première tentative et prendra à partir de là.