Mysql
使用者角色和權限
看附圖。
我試圖讓這個盡可能簡單。
基本上,我希望擁有多個擁有網站的普通使用者的管理員(或超級使用者)。
- 管理員可以授予普通使用者訪問網站的權限或角色。
- 管理員可以查看和編輯他們擁有的使用者的所有站點。
- 使用者只能查看和編輯自己的網站。(根據角色)。
- 一個站點可以由多個使用者管理。
我不知道我是否應該
permissions
為每個角色創建一個包含多行的表,以便一個使用者可以為每個角色擁有多行,或者可能只在一行中使用一個數組…… Idk。我被困在那裡。簡單地做到這一點的最佳方法是什麼?
PS:我知道該圖形在site1 和site2 下有User2,但我不需要那麼複雜。相同站點的相同使用者但角色不同就足夠了。無需 1 個普通使用者編輯 2 個站點。
最簡單的結構是這樣的
PERMISSIONS
表:create table PERMISSIONS ( Site_ID int , User_ID int , Role char(1) , primary key (Site_ID, User_ID, Role) -- scenario 1 -- OR: , primary key (Site_ID, User_ID) -- scenario 2 )
使用以下值
Role
:
- A = 管理員
- P = 發布者
- E = 編輯
您需要多少行取決於您的程式碼如何解釋數據。您可以有非常簡單的程式碼,它嚴格按照面值解釋每個權限。要執行管理任務,使用者需要“A”權限。要執行發布任務,他們需要“P”權限等。在這種情況下,管理員將需要每個站點三個記錄(A、P、E 各一個)。同樣,出版商每個站點需要兩條記錄,而編輯只需要一條記錄。這種方法存在數據一致性錯誤可能會蔓延的風險,就像某人可能是發布者,但不是編輯者(由於缺少“E”記錄)。
或者,您可以使您的程式碼更複雜,在這種情況下,每個使用者每個站點只需要一個權限記錄。在這種情況下,管理任務需要“A”權限,發布需要“A”或“P”,而編輯需要“A”、“P”或“E”。這種方法的優點是需要維護的數據更少,並且不會出現不一致的情況。
還要注意,您不需要該
Users.Parent
列。如果管理員對某個站點擁有“A”權限,這將自動授予他們對該站點所有使用者的控制權。