Rails - кеширование ACL9 в сессии - PullRequest
1 голос
/ 30 апреля 2010

Я реализовал аутентификацию с Authlogic и авторизацию с 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 Ответ

1 голос
/ 06 мая 2010

Мне пришлось использовать session [] вместо 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? -%>
...

Он будет кешировать роль администратора в сеансе с первой попытки, а затем получит ее оттуда.

...