对于每个系统来说,权限都是一个很重要的组成部分,贯穿于整个系统功能,甚至包括数据。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绑定的,也是最复杂,工作量最大的部分。