簡體   English   中英

在數據庫中保存三級權限

[英]Saving three levels of permissions in database

在涉及兩個以上級別的數據庫中存儲權限的最佳方法是什么? 當前只有2級權限,它們存儲在橋實體表中,如下所示:

UID | Buildings | Floor
------------------------
 1  |  A, B, C  |  F9

還有一個名為“異常”的表,該表具有相同的結構,指示用戶不應對此具有權限:

UID | Buildings | Floor
------------------------
 1  |    null   |  C4

因此,在上面的示例中,用戶1將有權訪問建築物F的第9層,建築物A,B和C的所有房間,但沒有權限訪問建築物C的第4層。

新要求是在樓層上添加更精細的權限級別。 因此代碼看起來像A1A,A1B等。建築物和房間始終為字母,樓層編號始終為數字。 我無法更改這些代碼的格式,因為它們來自外部來源。

處理這種情況的最佳方法是什么? 我知道Linux會用一點字符串來處理組和用戶的文件許可權,但是在我看來,有成千上萬個房間聽起來不可行,而且用戶/組只有兩個級別。

我考慮過只添加一個名為Rooms的新列,並繼續以逗號分隔的字符串,但是有更好的方法嗎? 如果重要的話,我正在使用MySQL。

如果必須實現這一點,我將使用包含三列的單個表-uid,type和element。 Uid引用用戶,類型(建築物,樓層,房間)和元素,作為建築物或樓層或房間的代碼。 我通常會為每個訪問元素的每個人插入一行。

如果我確定元素的格式遵循嚴格的模式,我也可以變得更加大膽。 例如

建築物將只有代碼字母

樓層將具有類似letter.number的代碼

房間將具有類似letter.number.letter的代碼

在上述情況下,您只能將一個表與uid和element列一起使用,因為從數據的格式中,您可以提取元素的類型(如果是建築物,樓層或房間)。 您還可以進一步使用通配符存儲訪問權限:

進入C樓的所有樓層和房間:C *

進入B樓6樓的所有房間:B6 *

甚至

進入所有樓層和建築物的所有C房間:** C

進入所有第二層:* 2 *

希望能幫助到你

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM