信頼度に基づいてユーザーを分離するためだけに、複数のテーブルを使用することはありません。質問とコメントを読んだ後、ルート管理者、クライアント管理者、雇用者管理者、および通常のユーザー用に個別のテーブルを作成する必要があります。これは、グループごとに信頼レベルが異なるためです。テーブルが2つしかない場合でも、コーディングを開始すると、実装/メンテナンスが非常に醜くなる可能性があります...
ただし、個別のテーブルを使用することを非常に決意しているようですが、そうすることを選択した場合、これを「隠す」ことができる手法があります。たとえば、これらのテーブルをマージするビューを作成する、DAO で SQL ユニオンを使用する、またはそれぞれを読み取るなどです。繰り返しますが、アプリケーションを構築するときに、この設計で問題が発生する可能性が高くなります。
単一のテーブルを使用して、それらの間に多対多の関係があるusers
という概念を導入したいと思います。roles
ユーザーの作成時に、各ユーザーをデフォルトのロール (たとえば、ユーザーroot-adminには root-admin のロールがあるなど) と、それらに適合すると思われる他のロール (たとえば、ユーザーcleint-adminには追加のロールがあります) を関連付けます。 client-sub-admin の役割など) 要件に基づいて、ユーザーに直接関係しない役割が存在する可能性があります。ゲスト、メンバーなど
また、ロールとのオプションの多対多の関係を持つアプリケーションの概念を紹介し、contexts
最初にロールroot-adminをアプリケーション コンテキストに関連付けます。これは、制限がないことを意味します。ビジネス要件に基づいて、追加のコンテキストが作成されます (たとえば、ロールEmployer-adminは、コンテキストHire-employeesの一部であるなど)。
承認時に、セキュリティ マネージャー コンポーネントは、必要に応じて追加のロジックを含めて (たとえば、ユーザーが無効になっている)、ユーザーとそれに関連付けられたロール/コンテキストに基づいてアクセスを許可/拒否できます。
次の懸念は、他のユーザーには適用されない特定のユーザーの追加データがあることでした。これを解決するためprofiles
に、ユーザー テーブルとのオプションの 1 対 1 の関係を持つテーブルを導入します (すべてのユーザーがプロファイルを持っているわけではありません。たとえば、ユーザーroot-adminは持っていません)。
スキーマ (ドラフト):
__________________ __________________
|USERS | |ROLES |
|==================| |==================|
|id | |id |
|username | 1..* 1..* |name |
|password | -------------- |description |
|failedattempts | |... |
|disabled | | |
|... | | |
|__________________| |__________________|
| 1 | 0..*
| |
| |
| |
| 0..1 | 0..*
__________________ __________________
|PROFILES | |CONTEXTS |
|==================| |==================|
|id | |id |
|firstname | |name |
|lastname | |description |
|email | |... |
|dob | | |
|... | | |
|__________________| |__________________|