請問各位:
若要規劃組織圖mysql資料表,
有何建議呢?
1.假設日後會有相關的檢視作業,
例如:
A可檢視所有人的日誌。
B可檢視DEFJ的日誌,
C可檢視GH的。
J只能檢視自己的,不能看以上的資料。
2.未來可能整批更換上層,
例如C可能附掛到F,那麼GH也會跟著移過去。
組織圖
A
/ \
B C
/ | \ / \
D E F G H
|
J
目前資料表簡易規劃:
id pid name
1 2 B
2 0 A
3 2 C
4 1 D
5 1 E
6 3 G
7 1 F
8 3 H
9 5 J
假設我現在是以B的身分登入,
可以找出以下是可以檢視的:DEFJ,
這邊是靠遞迴嗎?
找出B的id是1,然後找出pid是1的有DEF,
接著E的id是5,找到有J這樣....
處理樹狀結構的另一種方法是nested set pattern,可以參考:http://twpug.net/discussion/3034裡面的討論。
底下有人提到幾本書,也可以參考,我也是從這幾本書看到這個做法。這個做法有利有弊,建議還是先評估一下你的需求。
其實還有一個問題:
那就是A跟B可能是同一人(兼任多角色、校長兼撞鐘)
不知道這樣的規劃要如何呢?
這樣喔
一個方向是Hierarchical RBAC(Role Based Access Control),關於RBAC的研究,最經典的論文:
http://csrc.nist.gov/rbac/sandhu-ferraiolo-kuhn-00.pdf,NIST的RBAC標準就是以這篇文章為基礎,裡面有介紹從簡單到階層式的RBAC概念。
實作的話,可以參考stackoverflow上面有人提出的設計:
http://stackoverflow.com/questions/16139712/how-to-design-a-hierarchical-role-based-access-control-system
簡單地說,觀念就是角色是有階層的,然後每個人都可以指派給他「數個」角色。通常在使用者進入系統時,只會指派給他最低階層的角色,然後在需要更高階層權限時,才指派給他所擁有的更高階層角色,以取得權限。如果角色權限不足,就無法進行特定的操作。
RBAC的角色,是系統可進行的操作的權限的集合。如果是階層式的RBAC,那高階層的角色會繼承低階層角色的權限,再加上自己特有的權限,構成這個角色的權限。
基本概念大致如上。