我用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>"}>而我却被困在这里。我做错了什么?
发布于 2010-05-07 00:59:53
我不得不使用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? -%>
...它将在第一次尝试时缓存会话中的管理员角色,然后从那里获取它。
https://stackoverflow.com/questions/2746767
复制相似问题