复杂数据权限设计方案
需求:有個權(quán)限樹,資源掛在樹的節(jié)點(diǎn)上面。父節(jié)點(diǎn)的權(quán)限可以訪問所有子節(jié)點(diǎn)的資源。
更具體點(diǎn),一個公司有一個部門,這個部門是棵樹(權(quán)限樹)。每發(fā)布一個課程,都需要設(shè)置屬于哪個部門的權(quán)限。每個人屬于部門。這樣,來一個人,他可以看到該部門所有子部門的所有資料。
?
方案1:基于數(shù)據(jù)庫的實(shí)現(xiàn)
?
?
這是一棵權(quán)限樹。子節(jié)點(diǎn)的值為父節(jié)點(diǎn)copy+一個遞增的數(shù)字。
資源的表有個字段存儲節(jié)點(diǎn)的數(shù)字。
?
當(dāng)用戶權(quán)限在某個節(jié)點(diǎn)的時候,使用mysql?? like 'X%'??就可以找到下面的所有的資源。
?
?
方案2:
使用搜索引擎實(shí)現(xiàn)。
?
資源a掛在1上,a的標(biāo)簽是[1];資源b掛在2上,標(biāo)簽是[1,2]?
用戶權(quán)限是1,可以找到a,b的資源。如果用戶權(quán)限是2,用2搜索,可以找到b的資源
標(biāo)簽:就是從根到當(dāng)前節(jié)點(diǎn)的路徑。中間用,或者空格分割,這樣es就可以分詞。
?
方案1跟2各有千秋。方案1?在多表join的時候,比較方便。實(shí)際業(yè)務(wù)場景除了權(quán)限做過濾,還有其他的搜索條件。
轉(zhuǎn)載于:https://www.cnblogs.com/gengaixue/p/9241531.html
總結(jié)
以上是生活随笔為你收集整理的复杂数据权限设计方案的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 2018.06.28 与或(线段树)
- 下一篇: 前端工作流