質問

これは正確な答えではなくアドバイスの質問のようなものです...

私の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が一意であることを保証できません - アプリケーションレベルで自分でやらなければならないことを保証できます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top