在多服务系统中,如何对业务数据进行权限校验

查看 70|回复 5
作者:awesomePower   
比如说有个简单的账号权限表,字段是账号和组织 ID 。然后有若干业务表,业务表里面的每条数据都标记了是和哪个组织 ID 关联的。这些业务表分散在不同的服务中,对每个服务的请求都会有账号信息。
有没有一种通用且高效的方法,对账号查询或修改业务数据进行权限控制。

权限, 账号, 业务, 业务表

dode   
接收请求的时候检查账号和组织 ID 权限,再决定要不要执行业务逻辑
awesomePower
OP
  
@dode 谢谢解答。但如果是该账号有 2000 个组织 ID 的权限;同时该账号查询了某张业务数据表,需要查询到符合他权限的数据,这种场景有什么好方案处理呢?
lujiaxing   
这个我以前倒是做过. 就是数据权限嘛.
当时的需求是:
1. 自己部门的一线员工可以看自己部门的数据.
2. 上级部门领导可以看本部门以及下属部门的数据. 上级部门的一线员工不可以查看下属部门的数据.
3. 部门可以临时抽调人员, 临时抽调人员享有跟借调部门一样的数据权限. 同时被抽调人员仍享有自己原属部门的数据权限.
我当时是这样设计的:
由于我们的用户表与部门表都存在自增 ID, 那么数据权限就是在每条数据后面增加两个字段: 部门权限, 个人权限.
全都是 blob 类型, 大端.
里面按 bit 存储权限. 比如 ID 为 1 的用户可以看, 那么个人权限里的权限二进制值就是 "10000000....000" 即 0x08.
1 2 3 三个用户可以看, 二进制存储就是 1110. 即 0x0E. 以此类推. 按部门权限查询的时候只需要查到这个用户所属部门, 是否为部门领导即可. 如果是部门领导, 则将本部门与下属部门的数据权限做 OR 运算, 就能得到他能看得到的数据了.
lujiaxing   
@lujiaxing 是 1000. 不是 10000000....000. 勘误
dode   
@awesomePower
这样的查询,这几千个组织 ID ,不要用前端传进来,根据这个账号,直接在后台获取一些 ID 列表,硬查呗
您需要登录后才可以回帖 登录 | 立即注册

返回顶部