在上一篇文章中我闡述了常見系統(tǒng)設計的兩種設計方案玻墅,一種是用戶—角色的設計模式介牙,另外一種是用戶—職位—角色的設計模式。大體上說了下數(shù)據(jù)權限是通過組織架構進行控制的問題澳厢,并沒有詳細的進行闡述數(shù)據(jù)權限具體該怎么取值环础。
在很多的系統(tǒng)中,權限的控制代碼都進行了封裝剩拢。一般的程序員是很難看到具體邏輯的线得,鑒于此,我將對此進行詳細說明徐伐,希望可以幫助到想了解底層原理邏輯的產(chǎn)品和開發(fā)贯钩。
數(shù)據(jù)的控制,分為通用數(shù)據(jù)權限和特殊數(shù)據(jù)權限。
通用數(shù)據(jù)數(shù)據(jù)權限指的是通過組織架構來設計的權限角雷,特殊權限指的是可以通過職位和角色或者其他的條件進行處理的權限設計祸穷。
怎么進行通用數(shù)據(jù)權限的設計?
簡單的來說谓罗,可以把組織架構看成一棵樹粱哼,數(shù)據(jù)相當于樹上的果子。在進行數(shù)據(jù)存儲時檩咱,每張表都包含字段職位揭措。由于職位是與組織部門進行關聯(lián)的,這樣就把數(shù)據(jù)(果子)掛到了組織架構(果樹)上了刻蚯。比如說:不同人所產(chǎn)生的考勤數(shù)據(jù)绊含,考勤數(shù)據(jù)在存儲時會掛到其組織部門下面,也就是樹的某一枝丫下面炊汹。
在取數(shù)據(jù)的時候躬充,當用戶登錄系統(tǒng)賬號的時候,賬號關聯(lián)職位讨便,職位關聯(lián)部門充甚,找到其所屬的部門,就可以取到其下的數(shù)據(jù)霸褒。換句話說伴找,找到其所屬的大樹的枝丫,就可以拿到其下所結的果子废菱。
一言以蔽之:怎么存數(shù)據(jù)技矮,就怎么反著取數(shù)據(jù)。
怎么進行特殊數(shù)據(jù)權限的設計殊轴?
我主要說下用角色和組織類型做特殊的權限控制衰倦。為什么要做特殊的數(shù)據(jù)權限控制呢?因為通用數(shù)據(jù)權限旁理,只能滿足一般的數(shù)據(jù)控制樊零。比如:是A樹枝的一個點,我不但想要取到A樹枝下所有的果子孽文,而且想取C樹枝下的果子淹接,一般的通用數(shù)據(jù)設計方式就無法滿足。
用角色做數(shù)據(jù)權限
比如:我想要具有相同角色的人所看的數(shù)據(jù)是一樣的叛溢,而這兩個角色是屬于不同的部門塑悼,那么我們該怎么處理呢?只需要我們存儲數(shù)據(jù)的的時候楷掉,同樣是把數(shù)據(jù)存儲在職位上厢蒜,職位關聯(lián)角色霞势,通過外掛表的方式,在取數(shù)據(jù)的時候斑鸦,我們反著找就可以了愕贡。
除此之外,可以通過組織類型來做特殊權限控制巷屿,基本上都要通過外掛表的形式固以。
綜上:數(shù)據(jù)權限的設計,考慮清楚如何存嘱巾,就知道了怎么取憨琳。