我是ruby on rails的新手,我正在尝试编写一个具有四种不同用户访问级别(代表、顾问、主席、管理员)的网站。对于每个视图,我希望在登录时创建一组不同的视图,以便它们具有不同的功能。验证用户登录并重定向到每个访问级别的控制器的最佳方法是什么?
发布于 2015-07-10 23:28:58
您可能需要一种称为基于角色的身份验证。最简单的方法是将字符串字段“角色”添加到用户模型中。
关于登录时的重定向,这取决于您使用的身份验证系统。
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
但是,当然,这取决于你的应用逻辑。
如果你想要完全不同的视图,最好为每个角色创建不同的namespaces:
Rails.application.routes.draw do
namespace :admin do
end
namespace :advisor do
end
...
end然后,您只需在视图下创建相应的目录: admin,delegate,advisor,advisor
发布于 2015-07-10 23:59:25
我推荐使用CanCanCan gem https://github.com/CanCanCommunity/cancancan。您可以轻松、轻松地为每个角色设置权限。
https://stackoverflow.com/questions/31344477
复制相似问题