web-dev-qa-db-ja.com

Laravelアプリにフロントエンド(ユーザー)とバックエンド(管理者のみ)が含まれる)に最適なアーキテクチャ

Laravelを使用してWebサイトアプリケーションを構築しています。これにより、ゲームトーナメントを実行できます。サイトは、結果を追加/編集できる「管理者」である2種類のユーザーで構成されます。もう1つは、基本的にトーナメントの結果を表示できる「ユーザー」です。

この2つの方法を構築できます。

A)Laravelアプリが主にフロントエンドであるアプリを1つ用意し、管理者のみがアクセスできるCMS管理である「/ admin」または「/ cms」というルートを用意します。管理者'users'テーブル( 'frontend'にログインするユーザー用)と同様に、 'admins'という名前の独自のDBテーブルがあります。Laravelでガードを使用して、「通常の」ログが記録されるのを防ぐことができます管理者などにアクセスするユーザーの場合...これは、すべてのモデル/テンプレートが1つの場所などにあることを意味します。

B)すでに上に示したように、adminsテーブルとusersテーブルを持つ同じデータベースを使用して、www.gamingsite.comとadmin.gamingsite.com(たぶん2つのまったく異なるドメイン)の2つのLaravels個別アプリを持っている場合、これはすべてのモデル/テンプレートは、それぞれ「フロント」と「バックエンド」から完全に分離されています。

どちらにも長所と短所があります...この状況で他の開発者は通常何をしますか?私は両方がうまくいくと感謝できますが、他の開発者が何をすることを検討するのか知りたいです。

追記:Laravel 5.4を使用しています

4
Zabs

1つのアプリと1つのユーザーテーブルを持つことははるかに一般的です。そこにあるすべてのCMS(Wordpress、Joomla、フォーラムソフトウェア)を見てください。管理者は、常に追加の権限を持つ通常のユーザーです。

Laravel私が書いたプロジェクトでもこれに従います。ユーザーテーブルを1つ使用し、levelフィールドを追加して、通常のユーザーの_1_と_100_ for admin。整数を使用する理由は、将来さらにレベルを追加できるようにするためです。たとえば、「モデレーター」の場合は_50_であり、「モデレーター以上」などの複数のレベルを簡単に確認できます。私は通常、Eloquent Userクラスに関数を追加するので、if ($user->isAdmin())などを書くことができます。

次に、管理ページのみを処理するコントローラーにマップする_/admin_ルートを追加します。 Laravelにはいくつかの Authorizationメソッド が組み込まれているので、それを使用できます。個人的には、「ロール」ミドルウェアを作成してからAdminController::__construct()を呼び出します$this->middleware('auth.role:admin');を使用する方法はたくさんあります。

3
DisgruntledGoat