我不会仅仅根据我对用户的信任程度来使用多个表来分隔用户。在阅读您的问题和评论后,您必须为根管理员、客户管理员、雇主管理员和普通用户创建单独的表,因为每个组的信任级别不同。当您开始编码时,即使只有两个表,实施/维护也会变得非常难看......
不过,您似乎非常坚定地使用单独的表,如果您选择这样做,您可以使用一些技术“隐藏”它,例如,创建一个视图来合并这些表,在您的 DAO 中使用 SQL 联合,或者阅读每个表并以编程方式合并数据等。同样,当您构建应用程序时,您很可能会遇到此设计的问题。
我宁愿使用单个表,users
并介绍roles
它们之间具有多对多关系的概念。在创建用户时,我会将每个用户与一个默认角色关联(例如,用户root-admin具有 root-admin 角色等)以及他们似乎适合的任何其他角色(例如,用户cleint-admin有一个额外的client-sub-admin等角色)根据要求,可能存在与用户不直接相关的角色,例如。客人、会员等
我还将介绍contexts
具有与角色的可选多对多关系的应用程序的概念,然后最初将角色root-admin与应用程序上下文相关联,这意味着他/她没有任何限制。将根据业务需求创建额外的上下文(例如,角色employer-admin是上下文hire-employees的一部分等)
授权时,安全管理器组件可以根据用户及其关联的角色/上下文授予/拒绝访问权限,并在必要时包含附加逻辑(例如,用户被禁用)。
您的下一个问题是您拥有某些用户的额外数据,这些数据不适用于其他用户。为了解决这个问题,我将引入与profiles
用户表具有可选的一对一关系的表(并非每个用户都有个人资料,例如用户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 | | |
|... | | |
|__________________| |__________________|