我使用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>"}>
我被困在这里。我做错了什么?
答案 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? -%>
...
它会在第一次尝试时缓存会话中的管理员角色,然后从那里开始。