Ruby on rails 我如何正确设置Rails 4 Desive身份验证,使用三种不同的用户类型和每种类型的不同授权?
所以我已经思考这个问题好几天了,没能想出一个有说服力的解决方案。网上有一些资源,但不是很全面。 以下是我的情况: 规格 需要对三种不同用户类型进行身份验证的Rails应用程序 管理员、经理、客户 它们有非常不同的属性 当他们登录时,他们会看到非常不同的观点 想要维护一个单一的登录表单吗 每个用户类型仅限于其自己的控制器及其操作 客户可以通过主页注册 管理员和管理员只能从管理员门户创建 目前,我已经设计了一个用户类,以及用户和管理员、经理、客户机之间的多态关系。我尝试使用单表继承,但由于每个用户类型都有不同的属性,因此我希望避免使用包含许多空值的大型单表 提议的解决办法 多态关系。用户模型,包括管理员、经理和客户端 继承。这里的问题是,如何将每个模型限制为 他们各自的控制器 用户模型,具有has_one关系 使用ClientProfile和ManagerProfile来处理额外的 属性。然后使用声明性授权或CanCanCan 限制授权。这有助于保持应用程序干燥,只需 一个用户模型,但视图逻辑会变得复杂Ruby on rails 我如何正确设置Rails 4 Desive身份验证,使用三种不同的用户类型和每种类型的不同授权?,ruby-on-rails,authentication,devise,roles,Ruby On Rails,Authentication,Devise,Roles,所以我已经思考这个问题好几天了,没能想出一个有说服力的解决方案。网上有一些资源,但不是很全面。 以下是我的情况: 规格 需要对三种不同用户类型进行身份验证的Rails应用程序 管理员、经理、客户 它们有非常不同的属性 当他们登录时,他们会看到非常不同的观点 想要维护一个单一的登录表单吗 每个用户类型仅限于其自己的控制器及其操作 客户可以通过主页注册 管理员和管理员只能从管理员门户创建 目前,我已经设计了一个用户类,以及用户和管理员、经理、客户机之间的多态关系。我尝试使用单表继承,但由于每个用户类
在这两种解决方案中,哪一种更具可扩展性、更干净、更安全?如果有其他关于通用应用程序架构的建议,那会更好吗?谢谢 这就是我如何在ROR上从多个用户类型设置应用程序的方法
#config/routes.rb
AppName::Application.routes.draw do
devise_for :users, :controllers => {
registrations: 'users/registrations',
:sessions => "users/sessions",
:passwords => 'users/passwords',
:confirmations => 'users/confirmations'
}
authenticate :user do
namespace :users do
....
get '/' => 'dashboards#index'
root :to => 'dashboards#index'
end
end
devise_for :admins, :controllers => {
:sessions => "admins/sessions",
:passwords => 'admins/passwords',
:confirmations => 'admins/confirmations'
}
authenticate :admin do
namespace :admins do
....
get '/dashboard' => 'dashboards#index
root :to => 'dashboards#index'
end
end
root 'pages#index'
end
现在您已经准备好了路线,可以创建控制器了
我有
#app/controllers/user_controller.rb
class UserController < ApplicationController
before_filter :authenticate_user!
layout 'users/default'
before_filter :check_user_active
private
def check_user_active
unless current_user.active
flash[:notice]= t(:user_not_active)
sign_out current_user
redirect_to new_user_session_path
end
end
end
# app/controllers/users/sessions_controller.rb
class Users::SessionsController < Devise::SessionsController
layout 'users/login'
def create
end
def destroy
end
end
最后但并非最不重要的是视图
只需将所有内容放入其名称空间,如app/views/users/sessions/new.html.haml