你问题是多级子集查询的性能问题?
哈哈哈……应该用Join来做啊!一个业务模块应该有一张业务主表对吧,这张表里面应该有创建部门这个字段对吧。那么,数据权限就是某角色对某业务主表的行数据的授权了。譬如A角色授予了A部门数据的读写权限和B部门的只读权限,那么很容易就能得到A角色对组织机构的授权表(1读写0只读):
|机构|授权|
|A|1|
|B|0|
这个授权表可以写成一个数据库表值函数。用这张表和业务主表join一下,不就把没有授权的C/D/E什么的部门都给join没了吗。把这个授权信息和业务数据一起发到前端,前端不就可以根据权限来限制编辑/删除等非只读的操作了吗?当然,后端还是需要验证数据权限是否允许编辑删除的。
实际业务当然不会这么简单,还会涉及到用户和角色的转换、部门的包含关系等。但无论情况多复杂,最终,还是能够转换成上面我给出的那个对具体部门的授权表的。
几十万个单位,说的太夸张了吧,这个,必须使用通过配置表Join来做
directory专门解决这种问题
只给你一个提示:用空间换时间。
通过编码规则,每个组织机构都具有自己特定编码,然后通过编码进行检索,挺好的性能。