Laravel 4.で簡単なチケットシステムを設計しています。このシステムでは、ユーザーがチケットを作成し、管理者がそれに答えるだけです。
ユーザーは次のことができるようになります。
管理者は次のことができるようになります。
つまり、ユーザーと管理者は非常に似ていますが異なる機能を実行できます。 このシステムを設計して、実行する必要があるコピーと貼り付けの量を減らす方法は何ですか?
これまでのところ、私は2つの可能性を考え出しました。
2つのコントローラーを持つ2つのルートセットを作成します。1つはユーザー用で、もう1つは管理者用です。コントローラー間のほとんどのロジックをコピーして貼り付けますが、ユーザーが自分のチケットのみを表示できるようにいくつかの変数を変更します。両方のコントローラーは同じビューとモデルを共有します。ビューに追加のチェックを追加して、管理者が新しいチケットを作成するためのボタンを表示しないようにします。
これの欠点は、特定のことを管理者から隠し、他のことをユーザーから隠すために、ビューにロジックを配置する必要があることです。また、コントローラ間でコードをコピーして貼り付けています。
ルートの2つのセットを作成しますが、同じコントローラーを使用します。コントローラのifステートメントを使用して、ユーザーか管理者かによって異なるビューを表示します。
ただし、今はビュー間でコードをコピーして貼り付けています。同じコントローラーに2つの異なるロジックセットがあると、少し混乱する可能性もあります。
これについてより良い方法はありますか?
2つの異なるUIを記述します。
本当に。私はまさにそのようなシステムに毎日取り組んでおり、User
とAdministrator
のユーザーエクスペリエンスは完全に異なります。それらのユーザーのニーズは完全に異なるため、それらは異なります。
Administrator
sは1日の大部分を費やし、その前にチケットリストを開いて、終日チケットのオン/オフを操作します。 Administrator
UIは、人間が使用する主要なアプリケーションに適しているため、効率的で強力である必要があります。
User
sがまれにあなたのサイトにアクセスし、チケットを作成して、チケットをチェックして、去ります。 User
UIは、理解してナビゲートしやすく、ほとんど使用する必要がないため、使用頻度の低いアプリケーションに適している必要があります。
役割ベースの権限を確認しましたか? 1つのコントローラー、1つのルートは、ユーザーの役割に応じて異なる結果を返す/受け入れます。
例えば。 http://blah.com/tickets へのGETリクエストは、リクエスタが管理者である場合はすべてのチケットを返し、そうでない場合はユーザー自身のチケットを返します。このルートへの投稿はユーザーに200を返しますが、管理者には40xエラー(405はここに収まると思いますか?)です。等。