2013-06-25 72 views
0

我需要創建一個多級應用程序,用戶詳細信息存儲在名爲Users的mysql表中。多級登錄表設計

現在我需要讓用戶創建子用戶或客戶帳戶。所以會有可以在網站上登錄的管理員,用戶和客戶賬戶。

我的問題是:我怎麼能組管理員和自己創建的子用戶和客戶端?

我應該創建一個沒有管理員細節的第二個表?或者更好地讓客戶端和用戶在同一個管理表中,然後在表上創建一個自我關係?

+2

沒有絕對正確或錯誤的解決方案。這完全取決於你在做什麼以及最終的細粒度權限。查看訪問控制列表(ACL)。 –

回答

1

將所有帳戶保留在同一個表中,並添加一個parentAccount列來存儲帳戶父級的主鍵。

+0

只是澄清一點:如果我創建一個管理員,我應該將prent設置爲null,或者我應該將父級設置爲admin self? – Tropicalista

+0

@ Tropicalista然而你想要做到這一點;我將它設置爲空以表示沒有父項的帳戶。 – Turch

3

這裏或多或少如何我已經做到了過去:

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記錄來刪除其所有數據。

這只是一個粗略的例子。還有更多的東西可以進入這樣的東西,所以你必須弄清楚你想要它是多麼細緻。