2010-04-30 5 views
1

Authlogic으로 인증을 구현하고 Acl9로 인증을 구현했습니다. 이제는 데이터베이스에 여러 개의 히트가 발생하지 않도록하여 사용자가 세션에이를 유지하여 관리자인지 확인하려고합니다.레일즈 - 세션에서 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? -%> 
... 

:이 코드는 매력으로 작동합니다.