谷歌在 2019 年放出了一篇论文是关于精细化全球授权的,Zanzibar: https://zanzibar.tech/ .通俗的说是 基于关系的权限控制
或 精细化权限控制
,但谷歌并没有给出具体实现,以下是我找到的几个开源实现
https://github.com/openfga/openfga
https://github.com/Permify/permify
https://github.com/authzed/spicedb
以及我的笔记
因为开源的并没有完全实现论文(只实现了 server 端,并没有实现 Leopard Indexing System),也都没有实现超级管理员的功能(诸如 给用户 a 分配所有资源 b 的权限),所以自己也想做一个,目前写了一部分了,欢迎交流
反射 reflect,可以理解为 ruby 的元编程,但跟元编程不是一回事
https://entgo.io/ facebook 出品,用代码生成的方式实现的,gorm 大量用反射有很明显的性能瓶颈
如果不想提高项目依赖复杂度,感觉 adcode 方式还是不错的(前提:层级是有限的)https://zh.wikipedia.org/wiki/%E4%B8%AD%E5%8D%8E%E4%BA%BA%E6%B0%91%E5%85%B1%E5%92%8C%E5%9B%BD%E8%A1%8C%E6%94%BF%E5%8C%BA%E5%88%92%E4%BB%A3%E7%A0%81
pg 的 wal_log 可能会解决你的问题,wal_level = logical,将 wal 级别设为 logical,这样外部可以解析更新数据,然后解析出来发给 kafka。
解析中间件:debezium,https://debezium.io/
我只是在测试环境下实验过,没用过生产。
个人感觉的坑点:1. wal_level 是否有性能影响,是否会影响主从流,2 debezium 能否 hold 住