Rails多访问级别

时间:2015-07-10 15:19:20

标签: ruby-on-rails ruby

我是ruby on rails的新手,我正在尝试编写一个具有四种不同用户访问级别(委托,顾问,主席,管理员)的网站。对于每一个,我想在登录时创建一组不同的视图,以便它们具有不同的功能。验证用户登录并重定向到每个访问级别的控制器的最佳方法是什么?

2 个答案:

答案 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。您可以轻松地为每个角色设置权限,而且工作量相对较小。