Mysql

使用者角色和權限

  • January 13, 2020

看附圖。

我試圖讓這個盡可能簡單。

基本上,我希望擁有多個擁有網站的普通使用者的管理員(或超級使用者)。

  • 管理員可以授予普通使用者訪問網站的權限或角色。
  • 管理員可以查看和編輯他們擁有的使用者的所有站點。
  • 使用者只能查看和編輯自己的網站。(根據角色)。
  • 一個站點可以由多個使用者管理。

我不知道我是否應該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”權限,這將自動授予他們對該站點所有使用者的控制權。

引用自:https://dba.stackexchange.com/questions/44079