我有两种用户:工人和管理员。 我有一张工人桌和一张管理员表。 我想在用户进入应用程序页面之前强制用户登录。 所以我在下一行添加了我的ApplicationController:
`before_filter :authenticate_user!`
现在,我编写了一个函数,名为:is_worker
,用于检查是否在workers表中找到了用户。如果是这样,将他重定向到工人的页面。如果找不到用户,请将他重定向到管理页面。
我希望工作人员无法进入管理页面,管理员将无法进入工作人员页面。
所以我想我应该将before_filter :is_worker
添加到:workerscontroller
和adminscontroller
。
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
如果我错了,请纠正我。
答案 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并查看管理数据。