Rails - 会话中的ACL9缓存

时间:2010-04-30 18:28:08

标签: ruby-on-rails authlogic acl

我使用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 helper方法时,它应该向session[:is_admin]添加一个布尔值,然后对于任何其他调用,从会话中获取它。但是我收到了这个错误:

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

我被困在这里。我做错了什么?

1 个答案:

答案 0 :(得分:1)

我不得不使用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? -%>
...

它会在第一次尝试时缓存会话中的管理员角色,然后从那里开始。