我不会用多个表只是基于我是多么信任他们的独立用户。在你的案例中阅读你的问题和评论后,你将不得不为根管理员,客户管理员,雇主管理员和普通用户创建单独的表,因为你的信任级别对于每个组都是不同的。即使只有两个表格,开始编码时,实施/维护可能会变得非常难看......
您似乎非常坚定地决定使用单独的表格,如果您选择这样做,那么您可以“隐藏”这一点,例如,创建一个视图,再合并这些表,在你的DAO使用SQL工会,或读取每个表和合并程序的数据等,为您打造您的应用程序,你将极有可能与此设计问题。
我宁愿使用单个表格users
,并介绍roles
的概念以及它们之间的多对多关系。在创建用户时,我会将每个用户与默认角色(例如,用户根管理员具有角色根管理员等)以及他们似乎适合的任何其他角色相关联(例如,用户cleint -admin具有基于需求客户子管理等)的其他角色有可能是不涉及直接的用户,如角色。 客人,构件等
我也将推出应用contexts
的概念,一个可选的多对许多关系到角色那么最初的作用根管理员与应用程序上下文所有意思是s关联他/她没有任何限制。其他上下文将根据业务需求来创建(例如,角色雇主管理员是上下文分期付款员工等部分)的基础上
授权时,安全管理器组件可以授予/拒绝访问用户及其相关的角色/上下文(如果需要,还包括附加的逻辑)(例如用户被禁用)。
您的下一个担心是您有某些用户的其他数据不适用于他人。为了解决这个问题,我会介绍profiles
表与可选的一对一关系的用户表(不是每个用户都有一个配置文件,例如,用户根管理员不)。
架构(草案):
__________________ __________________
|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 | | |
|... | | |
|__________________| |__________________|
有管理员和用户之间的这种根本区别,你不能只拥有“排名”字段? –
在我看来,在同一个表格或甚至相同的登录页面中拥有用户和管理员并非上帝的安全做法。 此外,如果页面和表不同,我可以限制管理页面的IP地址只有信任的人。 –
功能上的差异,管理员不会和用户做同样的事情,我们也不需要把自己与用户表中的管理条目混淆起来。 关于所有管理员管理员需求是用户名和密码相反的联系信息地址日期等进入用户表。 –