最近开发一套教务管理系统,类似ERP系统的软件,根据业务需求需要实现管理员对操作权限和数据权限的管理。
操作权限
这个不用多讲。做开发的朋友都知道RBAC,就是角色和权限控制,可以达到不同角色管理不同菜单或按钮的操作权限,当然维度也可以设计的更高一些,不管怎么说,操作权限都是围绕角色来开展的,目的就是要实现操作的角色化。
数据权限
刚开始设计是想通过角色来搞定数据权限的,但是发现问题很大,比如同样一个部门经理的角色,看到的数据是不一样的,所以,牵扯到数据二字,就应该不和操作二字等同起来。所以我们是通过职位来解决数据权限的,职位也可以叫岗位,是和数据查看范围有关系的,也就是组织结构里的关系。所以在设计数据结构的时候,每个有数据范围的数据实体,都需要具备数据拥有人的字段,比如A部门的小b同学,他创建的数据,只能由A部门的部门经理看到,而同样在角色里具有部门经理的B部门的部门经理是不能看到的。所以延伸出来了一个设计思路,根据数据拥有人,圈定查看范围。数据范围的维度有:全部、本集团、本公司、本部门、自己,五个维度,可以满足大部分业务场景,还有一个维度是自定义维度,可以自定义机构进行设置。这样的设计就达到了数据权限的操作灵活性。
当然有大神自己提出一个业务建议,就是针对数据的每一列,都设定上数据权限,比如员工工资这一列,只有特定的人才能看到,业务合理但时间不够,就没有进步一研究。
代码实现
这个用的是mybatis plus的一个拦截器实现的,贴部门代码给大家借鉴一下。有需要教务系统的可以沟通源码。
mybatis plus的拦截用的是JSql组件一个神奇的sql语句解析器。
欢迎大家留言评论。