0

私は現在、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フレームワークを使用してデータベースにクエリを実行し、ハブにユーザー固有のデータを入力することを計画しています。

何かアドバイスはありますか?私の計画/推論/アプローチに大きな欠陥がありますか?前もって感謝します!

4

1 に答える 1

0

私はあなたがこれを過度に設計しているように感じ、あなたがそれを必要としない何かを構築しています

3 つの異なるユーザー タイプが何であるかを明確にしておくことをお勧めします。ほとんどのアプリケーションでは、次の 3 つのユーザー タイプが必要です。

  1. ログインしていない、アプリケーションの一部にアクセスできるゲスト ユーザー
  2. 一般ユーザー
  3. 通常のユーザーの権限を管理する管理者ユーザー。

このリストにない場合、他にどのようなユーザー タイプが必要になるか知りたいです。

Devise ウィキページには、ゲスト ユーザーの作成方法と管理者ロールの追加方法に関する提案があります。おそらく、アプリケーションの通常のユーザーの機能を実装することから始めてから、上記のリソースを使用して他のユーザー タイプを追加することをお勧めします。

于 2012-10-09T14:03:50.533 に答える