私は現在、3つのユーザータイプを含むRailsアプリケーションを構築しています。これは私のWeb開発の最初の経験であり、後でコストがかかるような重大な設計エラーを起こさないようにしたいと思います。うまくいけば、より経験豊富なレールユーザーと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
3つのユーザータイプのそれぞれについて:
# 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など)内にさまざまな関連キーワードを最終的に追加できるようになることを願っています。
また、ユーザー依存のルーティングを実装する方法についても心配しています。アイデアは、ログイン時に各ユーザータイプに、異なるダッシュボード、異なるアクションなどの個別の「ハブ」が表示されるというものです。私は、DeviseSessionsControllerをオーバーライドすることでこれにアプローチすることを考えていました。このようなもの:
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
認証が成功すると、ユーザーはユーザータイプに基づいて別のページにルーティングされるという考え方です。devise current_userフレームワークを使用してデータベースにクエリを実行し、ハブにユーザー固有のデータを入力することを計画しています。
何かアドバイスはありますか?私の計画/推論/アプローチに大きな欠陥がありますか?前もって感謝します!