如何根据设计中的模型类型重定向?

时间:2013-02-17 10:35:06

标签: ruby-on-rails devise ruby-on-rails-3.2

我正在开发一个新的rails 3应用程序。在这个应用程序中,我有两种不同类型的资源(管理员车库),它们具有不同的视图和使用设计的2个不同的登录屏幕。管理员可以创建一个车库,并可以为车库生成密码,车库管理员可以使用该密码登录到应用程序。直到现在我能够实现这一点。

我在上述实现中遇到的一个问题是,车库管理员一旦登录,就可以通过更改浏览器中的URL来查看管理部分,并可以像管理员用户那样进行更改。

现在我想要实现的是为两个模型都有一个登录/登录表单,当有人登录时,根据他们的模型类型,他们应该被重定向到他们各自的视图。此外,我想限制所有用户,但管理员使用管理部分。

我应该采用什么方法来实现这一目标。我正在使用设计进行身份验证。

1 个答案:

答案 0 :(得分:1)

resource是您的某个模型的实例:

def after_sign_in_path_for(resource) 
  return admin_route_path  if resource.is_a?(Admin)
  return garage_route_path if resource.is_a?(Garage)
end

resource是模型名称的符号:

def after_sign_out_path_for(resource)
  return "/admin" if resource == :admin
  return "/"      if resource == :garage
end

通常会进入application_controller.rb


  

我在上述实现中遇到的一个问题是,车库管理员一旦登录,就可以通过更改浏览器中的URL来查看管理部分,并可以像管理员用户那样进行更改。

对此,这是授权问题,而不是身份验证问题。虽然你可以在设计中做一些简单的事情来管理这个,比如管理标志或那种性质的东西,所以你可以区分这两者。只是重定向不会完全解决这个问题。

看看cancan,声明性授权,我相信还有很多其他人。