對于每個系統(tǒng)來說,權(quán)限都是一個很重要的組成部分,貫穿于整個系統(tǒng)功能,甚至包括數(shù)據(jù)。RBAC是一個很好的模型,對于復(fù)雜的處理更多的還是和業(yè)務(wù)緊密聯(lián)系在一起,所以對于組件形式的RBAC產(chǎn)品還很難做到的。
對一個用戶來說,權(quán)限主要包括2個部分,data和action,其組合形式對我們來說就是一個view,每個權(quán)限對應(yīng)一個相應(yīng)的view。在這里我用三維的坐標(biāo)來思考,data和action是相應(yīng)的x,y軸,不同的data,action組成一個業(yè)務(wù)視圖,從三維的角度來看是一個2維的的平面,我們的系統(tǒng)功能也就是由不同的平面來做成的。
權(quán)限可以看作z軸,view在不同的權(quán)限上會有不同的表現(xiàn)形式,展現(xiàn)不同的數(shù)據(jù),不同的操作。這樣權(quán)限,數(shù)據(jù),操作看起來就會清晰很多。
我所設(shè)想的應(yīng)該是這樣的一種方式:view由不同的view component和action component組成,這里view只是一個模板,沒有任何業(yè)務(wù)數(shù)據(jù)。
提供一個類似PrivilegeViewFactory的類,傳入view模板,和相應(yīng)的角色(用戶,組。。),生成相應(yīng)的PrivilegeView,然后由業(yè)務(wù)邏輯去填充數(shù)據(jù),這樣可以容易做到權(quán)限和view的分離,層次也比較清晰。
每個view component要實現(xiàn)相應(yīng)的權(quán)限接口,要根據(jù)不同的角色生成不同的view component。比如DataGrid,不同的角色看的列是不同的,甚至數(shù)據(jù)內(nèi)容也是不同的,更細(xì)粒度的看,業(yè)務(wù)不同字段的的數(shù)據(jù)也是不同。這部分是和ui綁定的,也是最復(fù)雜,工作量最大的部分。