我不會用多個表只是基於我是多麼信任他們的獨立用戶。在你的案例中閱讀你的問題和評論後,你將不得不爲根管理員,客戶管理員,僱主管理員和普通用戶創建單獨的表,因爲你的信任級別對於每個組都是不同的。即使只有兩個表格,開始編碼時,實施/維護可能會變得非常難看......
您似乎非常堅定地決定使用單獨的表格,如果您選擇這樣做,那麼您可以「隱藏」這一點,例如,創建一個視圖,再合併這些表,在你的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地址只有信任的人。 –
功能上的差異,管理員不會和用戶做同樣的事情,我們也不需要把自己與用戶表中的管理條目混淆起來。 關於所有管理員管理員需求是用戶名和密碼相反的聯繫信息地址日期等進入用戶表。 –