将用户重定向到页面,将其他用户重定向到另一个页面

时间:2012-12-29 15:53:26

标签: ruby-on-rails redirect before-filter

我有两种用户:工人和管理员。 我有一张工人桌和一张管理员表。 我想在用户进入应用程序页面之前强制用户登录。 所以我在下一行添加了我的ApplicationController:

`before_filter :authenticate_user!`

现在,我编写了一个函数,名为:is_worker,用于检查是否在workers表中找到了用户。如果是这样,将他重定向到工人的页面。如果找不到用户,请将他重定向到管理页面。

我希望工作人员无法进入管理页面,管理员将无法进入工作人员页面。

所以我想我应该将before_filter :is_worker添加到:workerscontrolleradminscontroller

class ApplicationController < ActionController::Base
  protect_from_forgery

  before_filter :authenticate_user!

  def is_worker
     @email = current_user.email
     tag = Worker.where(:email => @email)
     if tag.nil?
        redirect_to '/admins'
     else
        redirect_to '/workers'
     end
  end
end
如果我错了,请纠正我。

1 个答案:

答案 0 :(得分:3)

效率不高。假设您正在使用STI,请创建一个is_worker?方法,如下所示:

def is_worker?
  current_user.type == 'Worker'
end

然后在控制器中添加如下方法:

def redirect_after_sign_in
  if current_user.is_worker?
    redirect_to '/admins'
  else
    redirect_to '/workers'
  end
end

我会把它变成私人方法。然后,您可以在用户成功登录后调用此方法。

即使这样,您也希望在控制器级别保护您的应用程序,以便工作人员不能只访问/admins URL并查看管理数据。