如何根据用户在rails 3中的角色重定向用户?

时间:2011-02-07 22:45:37

标签: ruby-on-rails-3 authentication authlogic cancan

我试图找出如何在用户登录Ruby / Rails3应用程序后根据他们的角色重定向某些URL的用户。

到目前为止,我已经使用authlogic gem进行身份验证,并使用cancan gem进行角色设置。

角色就像这样(在app / models / user.rb中定义):

class User < ActiveRecord::Base
  acts_as_authentic
  ROLES = %w[admin customer demo]
end

现在有app / controllers / user_session_controller.rb正在处理登录。 我想做这样的事情:

for r in User.role
      if r == "admin"
        redirect_to admins_url
      else
        redirect_to users_url
      end
end

由于以下错误,这不起作用:

"undefined method `role' for #<Class:0xb5bb6e88>"

如何根据用户的角色将用户重定向到某些网址,是否有简单或优雅的方法?

(角色在用户表的mysql列'role'中定义。)

2 个答案:

答案 0 :(得分:1)

for r in User.role令人困惑。您是否尝试访问该类中定义的ROLES数组,或者您是否尝试访问当前用户的角色值?

如果您尝试访问ROLES数组,请使用User::ROLES

使用authlogic,通常在application_controller中定义current_user。因此,可以使用current_user.role

找到当前用户的角色

所以你的代码看起来像

  if current_user.role == "admin"
    redirect_to admins_url
  else
    redirect_to users_url
  end

答案 1 :(得分:1)

你一定要看看CanCan。这是管理用户角色和能力的一种非常合理的方式。