我正在开发一个简单的Web应用程序,它具有用户模型和角色模型(以及其他),以及包含许多控制器的管理部分。我想使用before_filter来检查会话中用户的用户是否有'can_access_admin'标志。
我在application.rb中有这段代码:
def check_role @user = session [:user]
if @ user.role.can_access_admin.nil? || !@user.role.can_access_admin render:text => “您当前的角色不允许访问管理区域。” 返回 结束 端
然后我在其中一个管理员控制器中有这个代码:
class Admin :: BlogsController< ApplicationController的 before_filter:check_role
def list @blogList = Blog.find(:all) 结束 端
当我尝试查看列表操作时,我收到此错误:
用户的未定义方法'角色'...
任何人都知道我必须做些什么才能在application.rb中识别角色关联? (请注意,关联配置正确,@ user.role在我尝试使用的其他任何地方都正常工作)
答案 0 :(得分:6)
只是一个猜测,但似乎您的会话[:user]只是存储id,您需要这样做:
@user = User.find(session[:user])
或沿着这些行的某些东西从数据库中获取用户(及其关联)。
在过滤器中执行上述操作也很好。
答案 1 :(得分:1)
会话[:user]是否持有用户?还是user_id?在调用.role。
之前,您可能需要查找答案 2 :(得分:1)
此外,如果你正在使用ActsAsAuthenticated或RestfulAuthentication或他们的兄弟,你也可以使用他们提供的current_user
方法。