我使用devise的rails生成器创建了三个不同的角色(User,Admin,Manager),它们存储在不同的表和模型中......
如何禁止某人在同一会话期间登录两个不同的角色?
答案 0 :(得分:0)
当用户尝试登录时,您可以验证他是否未以其他角色身份登录。 要做到这一点,你必须覆盖设计SessionsController。它解释了here for RegistrationsController但是SessionsController也可以这样做。 接下来,在您的新SessionsController中添加一个前置过滤器:
before_filter :require_not_authenticated_in_other_scopes, :only => [:new, :create]
然后在控制器中实现过滤器:
def require_not_authenticated_in_other_scopes
other_types = [:user, :admin, :manager] - [resource_name]
other_types.each do |type|
if self.send("#{type}_signed_in?")
resource = warden.user(type)
redirect_to after_sign_in_path_for(resource)
end
end
end
我已经从Devise的SessionsController中获取了部分实现,您可以在GitHub repository中找到它。