关于部门调整后的数据过滤问题

Blade 未结 1 1322
bluerose
bluerose 2019-11-20 21:57

这几天对于这个点思来想去还是没想太明白,场景如下

根据dept层级关系作为查询过滤条件,那么如果关系发生了改变,但是又想看之前子部门产生的的数据(当前已经不是子部门了)。

这里发生了变化后,子部门不是删除了,而是转移到另外的部门下。但是在之前的部门下的数据依然是属于之前部门的。

这里我想了3种方案,但是感觉都不完美,我确实已经想不出什么好办法了

1. 业务数据存储的时候把父级部门作为一个字段存起来。这样某个部门过滤数据时,把包含父级部门的筛选条件也带上。大致是 parentdeptId=A or deptId in(A+A的子部门集合),但是这种条件只能处理2级关系,因为只存了一个父部门。

2. 做一个类似于数据仓库的拉链表,记录关系的存在的有效时间。如  A部门  子部门 A   开始时间  结束时间。在查询的时候,每个部门带上时间条件进行过滤。但是这种方案会导致sql语句增加很长,相当于每个部门都有 deptId=子部门A and createTime>=开始时间 and createTime<=结束时间

3. 我个人觉得相对好一点的方案,在存储业务数据时,额外加一个字段存储所有的上级集合。这样在查询数据时,只要这个字段里的值包含了当前部门,则是可以查看的。

这种需求下,应该怎么设计才算合理。麻烦指导下。谢谢!!!

1条回答
  •  new
    new (楼主)
    2019-11-20 22:17

    给你个设计建议,你上面说的拉链表,我觉得是比较可行的方案,首先增加自定义数据权限。

    不要在现有部门权限上动刀,部门权限无非是类似于租户数据隔离这样的方式。实现sql解析的时候注入 (deptid=XXX or 拉链表逻辑)

    回答: 2019-11-20 22:17

    其实我个人觉得这就是一个自定义数据权限的问题,只是恰好遇到了部门这个用作数据隔离的业务体,这个自定义数据权限与部门数据权限 应该就是or的关系

    0 讨论(1)
提交回复