首页新闻找找看学习计划

数据权限的疑问?是否传统的数据权限都OUT了?

0
悬赏园豆:50 [已解决问题] 解决于 2018-02-27 15:23

各位大侠,本人近期做了一个超大型国企的项目,组织机构这块有几十万个单位,有一个特别变态的需求,就是通过授权某些单位可以看见其他单位及该单位以下的数据,用传统的方式把组织机构赋予了该用户,结果拿到的组织机构很多,我们用or或者in来进行查询,性能都不理想,很少烦恼,最多时真的有1000多个组织机构关联,sql没有优化空间了,索引啥的数据库该弄的都弄了,所以想问下大家有没有搞过之类的东东?当做一个难题,大家可以集思广益呗,好的思路加分!谢谢

< >
分享
最佳答案
0

Oracle最新的DB即可满足你的要求。

不同的PDB对应不同的组织结构,然后子组织可以共享父组织的一些数据。

 

听起来很像广告。。不过确实能完整满足你所需要的。

收获园豆:50
c99 | 小虾三级 |园豆:1832 | 2017-01-04 18:51
其他回答(6)
0

你问题是多级子集查询的性能问题?

吴瑞祥 | 园豆:28731 (高人七级) | 2017-01-04 11:02
0

 

哈哈哈……应该用Join来做啊!一个业务模块应该有一张业务主表对吧,这张表里面应该有创建部门这个字段对吧。那么,数据权限就是某角色对某业务主表的行数据的授权了。譬如A角色授予了A部门数据的读写权限和B部门的只读权限,那么很容易就能得到A角色对组织机构的授权表(1读写0只读):

|机构|授权|

|A|1|

|B|0|

这个授权表可以写成一个数据库表值函数。用这张表和业务主表join一下,不就把没有授权的C/D/E什么的部门都给join没了吗。把这个授权信息和业务数据一起发到前端,前端不就可以根据权限来限制编辑/删除等非只读的操作了吗?当然,后端还是需要验证数据权限是否允许编辑删除的。

实际业务当然不会这么简单,还会涉及到用户和角色的转换、部门的包含关系等。但无论情况多复杂,最终,还是能够转换成上面我给出的那个对具体部门的授权表的。

 

xuanbg | 园豆:266 (菜鸟二级) | 2017-01-04 11:20
0

几十万个单位,说的太夸张了吧,这个,必须使用通过配置表Join来做

悦光阴 | 园豆:2239 (老鸟四级) | 2017-01-04 11:39
0

directory专门解决这种问题

花飘水流兮 | 园豆:10341 (专家六级) | 2017-01-04 13:43
0

只给你一个提示:用空间换时间。

 

Daniel Cai | 园豆:10374 (专家六级) | 2017-01-04 16:42
0

通过编码规则,每个组织机构都具有自己特定编码,然后通过编码进行检索,挺好的性能。

笨鸟--想先飞 | 园豆:65 (初学一级) | 2018-02-27 15:21
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册