通览了 casbin 的文档,结合先前对 AWS IAM 的理解,以及对 ladon SDK 的使用,总结对比一下 Ladon & Casbin 两个授权库。
先对比两个项目的简介:
ladon
A SDK for access control policies: authorization for the microservice and IoT age. Inspired by AWS IAM policies. Written for Go.
casbin
An authorization library that supports access control models like ACL, RBAC, ABAC in Golang
二者都明确自己扮演的是 authorization 的角色,是 4A 中关键一环:
- Authentication
- Authorization ✅
- Accounting
- Audit
casbin 支持 ACL、RBAC、ABAC,而 ladon 仅支持 ACL。ladon 具备 Audit 能力,会对每次请求判断输出结构化的日志信息,casbin 没有。
如果要求尽快投入生产使用,casbin 一定是最好的选择,其有 toml 格式的 Policy Model 文件,和 CSV 格式的 Policy list 文件,程序启动的时候自动导入,即可能够对请求做权限判断了,官方甚至还提供了策略展示的 UI 界面。
然而使用 ladon 的话,则需要对 AWS IAM 体系有所了解,并结合自己的业务稍作调整才能使用。
casbin 对开箱即用者是十分灵活的,其可以通过 Model 文件来配置访问控制的逻辑判断,比如一个请求匹配到了多个策略,则可以设置为 allow-override
机制,也可以设置为 deny-override
机制。而 ladon 则是完全遵循 AWS 的风格:一否全否,除非改源代码,否则不能适应其他要求。
对于数据的持久化来讲,两个库都有 interface 来支持自定义持久化方法。由于 ladon 自身只支持 ACL ,所以其默认提供的持久化方案在 RBAC 要求下是不可用的。casbin 的有官方和第三方持久化实现,但没有真正的测试使用。
ladon 借鉴 AWS IAM 提供了一个策略判断的内核,casbin 则在访问控制的每个环节都提供了现成的方案,甚至还有一个 UI 界面。一个可以基于内核随意在上层自定义开发,另一个则需要踩坑的地方还有不少。
@andyyumiao 讚喔,感謝您提供另一種解決方案。