2010-04-30 4 views
1

Я реализовал аутентификацию с помощью Authlogic и авторизацию с помощью Acl9. Теперь я пытаюсь избежать нескольких обращений к базе данных, чтобы проверить, является ли пользователь администратором, сохраняя это в сеансе.Rails - кэширование ACL9 в сеансе

То, что я думал, что этот код должен работать:

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 

Так в основном на первый вызов is_admin вспомогательного метода, он должен добавить логическое значение session[:is_admin], а затем для любых других вызовов, взять его сессия. Но я получаю эту ошибку:

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

И я застрял здесь. Что я делаю не так?

ответ

1

Мне пришлось использовать сеанс [] вместо current_user_session []. Этот код работает как шарм:

(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 

(шаблон вида)

<% if is_admin? -%> 
... 

Он будет кэшировать администратор роли в сессии на первую попытку и затем взять его оттуда.

 Смежные вопросы

  • Нет связанных вопросов^_^