Ruby on rails 将用户重定向到某个页面,将其他用户重定向到另一个页面
我有两种用户:工作者和管理员。 我有一张员工表和一张管理员表。 我想强制用户在进入应用程序页面之前登录。 因此,我在下一行添加了我的应用程序控制器:Ruby on rails 将用户重定向到某个页面,将其他用户重定向到另一个页面,ruby-on-rails,redirect,before-filter,Ruby On Rails,Redirect,Before Filter,我有两种用户:工作者和管理员。 我有一张员工表和一张管理员表。 我想强制用户在进入应用程序页面之前登录。 因此,我在下一行添加了我的应用程序控制器: `before_filter :authenticate_user!` 现在,我编写了一个函数,名为:is\u worker,用于检查是否在workers表中找到了用户。如果是这样,请将他重定向到工人页面。如果找不到该用户,请将其重定向到管理页面 我希望工人将无法进入管理员页面,管理员将无法进入工人页面 因此,我认为我应该在过滤器之前添加::is
`before_filter :authenticate_user!`
现在,我编写了一个函数,名为:is\u worker
,用于检查是否在workers表中找到了用户。如果是这样,请将他重定向到工人页面。如果找不到该用户,请将其重定向到管理页面
我希望工人将无法进入管理员页面,管理员将无法进入工人页面
因此,我认为我应该在过滤器之前添加::is\u 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
class ApplicationController@email)
如果tag.nil?
将_重定向到“/admins”
其他的
将_重定向到“/workers”
结束
结束
结束
如果我错了,请纠正我。效率不高。假设您使用的是STI,请创建一个
is\u 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
然后,您可以在控制器中添加如下方法:
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查看管理员数据 谢谢。。然后我应该加上:before\u filter:is\u worker在ApplicationController中吗?实际上我不知道我是怎么想的。正在编辑。用户和工作人员/管理员的关系如何?您是否有一个用户
类(表)和两个独立的工作者
/管理员
类/表?或者它是一个具有“类型”或“角色”的类?如果您使用Deviate,您可以执行authenticate\u worker
和authenticate\u admin
,如果它们位于单独的表中。@nathanvda,我使用的是“Deviate”。我将每个注册的用户插入workers表。我有一个管理员表(我将电子邮件添加到此表中)。我可以让一个工人成为经理(通过将他从工人表移动到管理员表)。但是,你告诉我我可以做:“authenticate_admin”,但我必须将用户定义为admin。如何将用户定义为管理员?以及如何将用户定义为工作者(以便使用:authenticate\u admin和authenticate\u worker)