我目前正在构建一个包含3种用户类型的rails应用程序。这是我第一次使用Web开发,我想避免做出关键的设计错误,以后会花掉我的钱。希望更有经验的rails用户和Web开发人员能够指导我朝着正确的方向前进。
我想使用Devise作为我的主要身份验证系统,我目前正在计划这样的事情,以便在Devise框架中支持3种用户类型:
class User < ActiveRecord::Base
devise :database_authenticatable, :registerable,
:recoverable, :rememberable, :trackable, :validatable
attr_accessible :email, :password, :password_confirmation, :remember_me
belongs_to :rolable, :polymorphic => true
end
对于三种用户类型中的每一种:
# usertype1.rb
class UserType1 < ActiveRecord::Base
has_one :user, :as => :rolable
end
# usertype2.rb
class UserType2 < ActiveRecord::Base
has_one :user, :as => :rolable
end
实质上,用户类和几种不同的用户类型之间存在多态关联。我希望这种方法最终允许我在用户类型模型(例如has-many)中添加不同的关联关键字,以便于查询数据库。
我还关心如何实现依赖于用户的路由。这个想法是每个用户类型在登录时会看到一个单独的“集线器”,有不同的仪表板,不同的操作等等。我想我会通过覆盖Devise SessionsController来解决这个问题。像这样:
class SessionsController < ApplicationController
def new
end
def create
user = User.find_by_email(params[:email])
if user && user.authenticate(params[:password])
session[:user_id] = user.id
if user.type == 1
redirect_to hub_typeone
else if user.type == 2
redirect_to hub_typetwo
else
redirect_to hub_typethree
else
flash.now.alert = "Email or password is invalid"
render "new"
end
end
def destroy
session[:user_id] = nil
redirect_to root_url, notice: "Logged out!"
end
end
这个想法是,在成功验证后,用户将根据用户类型路由到不同的页面。我打算使用设计current_user框架然后查询数据库以使用特定于用户的数据填充集线器。
你们有什么指针吗?你看到我的计划/推理/方法有任何巨大的缺陷吗?提前谢谢!
答案 0 :(得分:0)
我觉得你过度设计了这个,并构建了一些You Aren't Gonna Need It
最好是清楚三种不同的用户类型是什么。大多数应用程序需要以下三种用户类型:
我很想知道如果他们不在此列表中,您需要哪些其他用户类型。
设计wikipages有关于如何create a guest user和how to add an admin role的建议。可能最好从实现应用程序的常规用户的功能开始,然后使用上面提到的资源添加其他用户类型。