我正在开发一个新的rails 3应用程序。在这个应用程序中,我有两种不同类型的资源(管理员和车库),它们具有不同的视图和使用设计的2个不同的登录屏幕。管理员可以创建一个车库,并可以为车库生成密码,车库管理员可以使用该密码登录到应用程序。直到现在我能够实现这一点。
我在上述实现中遇到的一个问题是,车库管理员一旦登录,就可以通过更改浏览器中的URL来查看管理部分,并可以像管理员用户那样进行更改。
现在我想要实现的是为两个模型都有一个登录/登录表单,当有人登录时,根据他们的模型类型,他们应该被重定向到他们各自的视图。此外,我想限制所有用户,但管理员使用管理部分。
我应该采用什么方法来实现这一目标。我正在使用设计进行身份验证。
答案 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,声明性授权,我相信还有很多其他人。