我需要創建一個多級應用程序,用戶詳細信息存儲在名爲Users的mysql表中。多級登錄表設計
現在我需要讓用戶創建子用戶或客戶帳戶。所以會有可以在網站上登錄的管理員,用戶和客戶賬戶。
我的問題是:我怎麼能組管理員和自己創建的子用戶和客戶端?
我應該創建一個沒有管理員細節的第二個表?或者更好地讓客戶端和用戶在同一個管理表中,然後在表上創建一個自我關係?
我需要創建一個多級應用程序,用戶詳細信息存儲在名爲Users的mysql表中。多級登錄表設計
現在我需要讓用戶創建子用戶或客戶帳戶。所以會有可以在網站上登錄的管理員,用戶和客戶賬戶。
我的問題是:我怎麼能組管理員和自己創建的子用戶和客戶端?
我應該創建一個沒有管理員細節的第二個表?或者更好地讓客戶端和用戶在同一個管理表中,然後在表上創建一個自我關係?
將所有帳戶保留在同一個表中,並添加一個parentAccount
列來存儲帳戶父級的主鍵。
只是澄清一點:如果我創建一個管理員,我應該將prent設置爲null,或者我應該將父級設置爲admin self? – Tropicalista
@ Tropicalista然而你想要做到這一點;我將它設置爲空以表示沒有父項的帳戶。 – Turch
這裏或多或少如何我已經做到了過去:
actions
id unsigned int(P)
description varchar(50) // Delete users, Edit something, etc.
roles
id unsigned int(P)
site_account_id unsigned int(F site_accounts.id)
description varchar(50) // Client Admin, Client User, etc.
roles_actions
id unsigned int(P)
role_id unsigned int(F roles.id)
action_id unsigned int(F actions.id)
site_accounts
id unsigned int(P)
name varchar(50) // Client 1, Client 2, etc.
users
id unsigned int(P)
site_account_id unsigned int(F site_accounts.id)
username varchar(32)
password varbinary(255)
email varchar(255)
users_roles
id unsigned int(P)
user_id unsigned int(F users.id)
role_id unsigned int(F roles.id)
您將創建「客戶端管理員」一role
而這個角色將擁有所有的權限,一個客戶端都不可能。然後,只要您註冊一個新客戶端,您就會創建一個site account
,您將爲其分配「客戶端管理員」角色。
你需要寫,讓他們創建代碼自己roles
(這將與他們site_account_id關聯)也讓他們分配任何他們actions
的每一個這些新roles
的。這使他們能夠完全控制他們想要的角色以及每個角色擁有的權限。
您還需要編寫允許他們添加/更新/刪除用戶的代碼(同樣,每個用戶都將與其site_account_id關聯)。
這使您可以輕鬆查看哪些角色/用戶屬於您的每個客戶端,只要您丟失了一個,就可以通過簡單地刪除他們的site_accounts
記錄來刪除其所有數據。
這只是一個粗略的例子。還有更多的東西可以進入這樣的東西,所以你必須弄清楚你想要它是多麼細緻。
沒有絕對正確或錯誤的解決方案。這完全取決於你在做什麼以及最終的細粒度權限。查看訪問控制列表(ACL)。 –