我是ruby on rails的新手,我正在尝试编写一个具有四种不同用户访问级别(委托,顾问,主席,管理员)的网站。对于每一个,我想在登录时创建一组不同的视图,以便它们具有不同的功能。验证用户登录并重定向到每个访问级别的控制器的最佳方法是什么?
答案 0 :(得分:1)
可能你想要一种名为Rolebased身份验证的东西。 最简单的一个是添加字符串字段" role"到用户模型。
关于登录时的重定向,取决于您使用的身份验证系统。
class ApplicationController < ActionController::Base
def after_sign_in_path
"/#{current_user.role}"
end
end
最简单的方法之一是使用Devise及其after sign in callback
但也可能考虑不创建不同的控制器,而是使用不同的layouts,如:
class ApplicationController < ActionController::Base
layout :choose_layout
private
def choose_layout
current_user.role.presence || 'application'
end
end
另一种方法是使用routing constraints
但是,当然,这取决于你的app逻辑。
如果您想要完全不同的视图,最好为每个角色创建不同的namespaces:
Rails.application.routes.draw do
namespace :admin do
end
namespace :advisor do
end
...
end
然后,您只需在相应的视图下创建目录:admin,delegate,advisor,chair
答案 1 :(得分:0)
我建议使用CanCanCan gem https://github.com/CanCanCommunity/cancancan。您可以轻松地为每个角色设置权限,而且工作量相对较小。