AdSense

網頁

2020/8/6

ER-Model 系統權限的角色設計 Compound Role

最近工作的權限設計的角色的ER Model設計如下。

這邊僅討論角色(Role)部份,不討論權限(Permission)及使用者群組(User Group)。

在系統權限設計中,角色通常用來綁定各種權限,使用者再透過設定角色來獲取對應的權限。

例如業務主管的角色,可能綁定新增訂單、刪除訂單、覆核訂單的權限。若使用者老王是業務主管,則系統要將使用者〔老王〕與角色〔業務主管〕建立關聯。


下面的設計為一個角色可由多個角色組合而成,由多個角色組成的角色稱為〔複合角色〕。複合角色本身也是角色。

而有些角色不能與另一角色成為複合角色,例如業務與採購,因為通常業務不允許知道公司產品的成本,則採購對業務來說就是〔互斥角色〕。



無複合的角色為〔單一角色〕。任何角色的基本資料(e.g. 角色名稱)皆維護在ROLE資料表。角色的複合關係透過COMPOUND_ROLE資料表管理。角色的互斥關係透過EXCLUSIVE_ROLE資料表管理。

若採購是業務的互斥角色,則業務是否同時為採購的互斥角色呢?這就要看業務需求,但我認為業務也應該把採購設為互斥。也就是當B為A的互斥,則代表A也為B的互斥。

單一角色不可與其互斥角色複合,換句話說複合角色中的單一角色彼此不互斥。例如有三個單一角色A、B、C。B為A的互斥角色,則A不可與B複合,B也不可與A複合﹔若C與A、B不互斥,C與B複合為D,D是否能再與A複合呢?當D要新增一個單一角色前,要檢查是否與既有的角色互斥。A與B互斥,而D中有了C、B,則D不能加入A。

ROLE

+----+------+
| ID | NAME |
+----+------+
| 1  | A    |
+----+------+
| 2  | B    |
+----+------+
| 3  | C    |
+----+------+
| 4  | D    |
+----+------+

EXCLUSIVE_ROLE

+----+---------+--------------+
| ID | ROLE_ID | EXCL_ROLE_ID |
+----+---------+--------------+
| 1  | 1       | 2            |
+----+---------+--------------+
| 2  | 2       | 1            |
+----+---------+--------------+

COMPOUND_ROLE

+----+---------+-------------+
| ID | ROLE_ID | SUB_ROLE_ID |
+----+---------+-------------+
| 1  | 4       | 2           |
+----+---------+-------------+
| 2  | 4       | 3           |
+----+---------+-------------+

複合角色設計上是否可以再與另一角色複合為另一個複合角色?若允許則邏輯會很複雜,在複合前要檢查複合角色中的角色是否已包含目前要被複合的角色,以Oracle來說會用到階層式查詢;若不允許則設計邏輯上比較容易,因為複合時的角色都必為單一角色。

若B為A的互斥角色,且F為B的互斥角色,那麼F是A的互斥角色嗎?答案應該是否定的,也就是F不因此為A的互斥角色。例如A是業務,B是採購,F是製造。採購與業務互斥,製造與採購互斥,但製造並不與業務互斥。

目前對權限角色設計沒有什麼經驗,以上敘述可能有錯誤。


沒有留言:

AdSense