1

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

`before_filter :authenticate_user!`

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

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

所以我想我应该添加: before_filter :is_workerto: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

如果我错了,请纠正我。

4

1 回答 1

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

我会将其设为私有方法。然后在用户登录成功后调用该方法即可。

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

于 2012-12-29T16:09:06.463 回答