诚心请教: 如何优雅的实现对数据的权限控制?

2020-09-12 11:28:19 +08:00
 igeeky

我实现了一个RBAC的权限系统. 它能很好的对 api 接口的权限进行控制. 具体功能及实现请参考这里: https://github.com/iGeeky/wolf/blob/master/README-CN.md

我现在想添加数据的权限控制, 如下下面一个例子:

目前的 RBAC 只能实现, 如果给了用户 A查询及审核视频的权限, 也就对所有视频都有了相应权限.

我考察了一下, 感觉使用ABAC实现对数据的访问控制, 可能是一个比较常用的方法, 比如上面的例子中, 可以定义这样的策略:

测试数据:

用户: {用户名: 用户 A, 角色: 短视频审核员, 部门: 运营 1 组, ...}
视频: {标题: 短视频, TAG: 短视频, ...}

策略(这里不是严格按照 ABAC 或 RBAC 的架构及概念来描述的):

用户: 用户.角色 = 短视频审核员
资源: 视频
动作: 读取,审核
匹配策略: 视频.TAG = 短视频

如果在业务系统内实现上面的逻辑, 应该是比较好实现这样一套控制策略的. wolf 的架构是与业务系统完全解耦的, 它是在 http 代理层实现的. 因此在目前 wolf 中实现却有一些难题:

对于以上问题, 大家有什么好的解决方案没?

7118 次点击
所在节点    程序员
33 条回复
37Y37
2020-09-12 13:58:06 +08:00
@workwonder guardian 的权限控制很细,能到 object 的粒度,也就是说你能给数据库里的每一条数据都单独赋权,这里有篇介绍文章,看看 https://blog.ops-coffee.cn/s/mhmww0p2lhvzofrsfa6s3a
gaius
2020-09-12 17:34:11 +08:00
权限系统只做通用的数据范围,架构 /部门这些,与角色组合。 不然我那么多业务系统,都要给你定制 tag/数据集吗。
KuroNekoFan
2020-09-12 17:42:36 +08:00
没有实践过,感觉要做细会挺 dirty 的
igeeky
2020-09-12 19:02:14 +08:00
@gaius tag 只是举个例子, 它可以是任何字段.
gmywq0392
2020-09-12 19:36:42 +08:00
通过 XACML 实现 ABAC 呢
cnxiaowen
2020-09-12 21:41:17 +08:00
先用数据表落地用户的数据范围,例如公司、部门、地区、代表处等;然后才能在接口侧校验用户的权限(不是接口权限)
inwar
2020-09-12 21:43:31 +08:00
权限系统只能做个粗粒度,具体还要靠业务
jones2000
2020-09-12 21:54:58 +08:00
这种具体业务具体分析了, 通用的不好做, 除非你已经有上千个应用场景再使用了, 否在靠自己想出来的应用场景是没有用的。实际情况很复杂,特别是涉及到数据库,不同的 DBA 设计的库都是不一样的。
igeeky
2020-09-12 22:22:09 +08:00
@jones2000 嗯, 确实要做好很难.
levelworm
2020-09-13 02:18:48 +08:00
可以在数据仓库层次做么
lihongming
2020-09-13 03:05:29 +08:00
感觉楼主是想做微服务架构中的 API Gateway 吧?

如果是的话,可以参考一下 AWS,AWS 的各项服务自身只做特别简单的权限控制,复杂控制是靠 Lambda 等其它服务实现的。服务收到请求后先把 Event 发给 Lambda,由 Lambda 返回 true 或者 false,然后再继续,这样就解偶了。
xuanbg
2020-09-13 09:56:39 +08:00
@dk7952638 #8 我多年的实践得到的结论也是如此。不过针对具体的业务如果基于组织架构的数据权限控制不能满足需求的话,可单独进行基于用户组的权限设置和控制。
igeeky
2020-09-13 13:08:07 +08:00
@lihongming 倒不是做 API Gateway,只做其中的一块: 后台用户的认证及权限管理.
感谢你的建议, 我会了解一下 AWS 的权限实现.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/706344

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX