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