質問
これは正確な答えではなくアドバイスの質問のようなものです...
私のCakePHPアプリでは、バックエンドユーザーとフロントエンドメンバーがあります。それらには、完全に異なる役割と権限があります(ユーザーはアプリケーションマネージャです。メンバーは、アプリケーションバックエンドにアクセスできないWebサイトに登録する訪問者です)。これら2つの許可タイプのためにさまざまなテーブルを使用するか、ロールパラメータを使用してそれらを管理し、テーブルをそのプロファイルに管理するだけで、もう1つの解決策が他のソリューションよりも優れているのはなぜですか?
解決
同じテーブルとrole
フィールドまたはtype
フィールドを使用します。あなたは1つのログインしかありません、そしてそれはアカウントを管理するのは簡単でしょう。
ACLまたはカスタム許可システムを使用して、異なるコントローラ/アクションを許可します。
他のヒント
権限のために、私はそれをするための3つの方法があります:
厳密な役割方法: アプリケーションのすべての役割は、プレフィックスを持つ関数にアクセスできますが、他のプレフィックスはありません。
ex: admin は admin_edit にアクセスしますが、 customer_edit
ではありません。
users
テーブルでロールvarcharまたはenumを追加し、Config/core.php
のルーティングプレフィックスを参照して、AppController::beforeFilter
でのアクセスを許可します。各役割は、彼の接頭辞のみにアクセスできます。
階層的な方法: あなたのアプリケーションの役割は階層的な方法で順序付けされています。役割が彼の接頭辞と彼の下のすべてのプレフィックスにアクセスできる。
ex: admin は、 admin_edit と customer_edit にアクセスしていますが、 顧客は admin_edit
にアクセスしていません。
users
テーブルでロールVARCHARまたはENUMを追加し、Config/core.php
のルーティングプレフィックスを追加し、AppController::beforeFilter
のルーティングプレフィックスを許可すると、どのロールにアクセスできる各$this->request->params['prefix']
をチェックします。
ex: admin admin_edit と customer_edit にアクセスできますが、そうではありません。 customer_create または user_stat 。 顧客にアクセスできる customer_edit 、 customer_create と user_stat ではなく、 admin_edit または user_edit
ACLを使用してください。アプリケーションへのアクセス許可を管理する最も簡単な方法ではありませんが、特定の権限が必要な場合は最善の方法です。これを忘れないでください。本当に必要な場合にのみACLを使用してください。
私はCornelbに同意します.1つのテーブルのみ。これはいくつかの追加の理由があります:
-
外部キー制約を追加すると、App Managerテーブルと訪問者の両方のテーブルを参照するように困難な場合があります。常にユーザーを指す場合は、1(マネージャテーブルを指すフィールド、および訪問者のテーブルを指すフィールド)ではなく2つのフィールドが必要です。そして、あなたが外部キーを持つ2つのユーザーIDフィールドを行に必要な場合はどうなりますか?それから突然4つのフィールドが必要です。1つのテーブル(上記フィールドで決定されたユーザータイプ)を指しているすべてのキーを持つSimper。
-
ユーザーIDが主キーの一部になることがある場合がありますが、それが2つの異なるユーザーIDフィールドがある場合は複雑です。データベースは、各ユーザーIDが一意であることを保証できません - アプリケーションレベルで自分でやらなければならないことを保証できます。