Overview
Casbin是一个强大且高效的开源访问控制库,支持各种访问控制模型,用于在全局范围内执行授权。
执行一组规则就像在策略文件中列出主题、对象和期望的允许操作(或根据您的需要的任何其他格式)一样简单。 这在所有使用Casbin的流程中都是同义的。 开发者/管理员对布局、执行和授权条件的控制是完全的,这些都是通过模型文件设置的。 Casbin提供了一个Enforcer,用于根据提供给Enforcer的策略和模型文件验证传入的请求。
Casbin支持的语言
Casbin为各种编程语言提供支持,准备在任何项目和工作流中集成:
Casbin | jCasbin | node-Casbin | PHP-Casbin |
生产就绪 | 生产就绪 | 生产就绪 | 生产就绪 |
PyCasbin | Casbin.NET | Casbin-CPP | Casbin-RS |
生产就绪 | 生产就绪 | 生产就绪 | 生产就绪 |
不同语言的功能集
我们一直在尽我们最大的努力,使Casbin在所有语言中都有相同的功能集。 然而,现实并不那么美好。
特性 | Go | Java | Node.js | PHP | Python | C# | Delphi | Rust | C++ | Lua | Dart | Elixir |
---|---|---|---|---|---|---|---|---|---|---|---|---|
Enforcement | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
RBAC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
ABAC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Scaling ABAC (eval() ) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
Adapter | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
Management API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
RBAC API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Batch API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
Filtered Adapter | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ❌ | ❌ |
Watcher | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ |
Role Manager | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ❌ |
Multi-Threading | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ |
'in' of matcher | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ |
注意 - ✅ 对于观察者或角色管理器,只意味着在核心库中有接口。 这并不能表明是否有观察者或角色管理器的实现可用。
什么是Casbin?
Casbin是一个授权库,可以在我们希望某个对象
或实体被特定用户或主体
访问的流程中使用。 访问类型,即动作
,可以是_读取_,写入,删除,或者由开发者设置的任何其他动作。 这就是Casbin最广泛使用的方式,它被称为“标准”或经典的{ 主体, 对象, 动作 }
流程。
Casbin能够处理许多复杂的授权场景,而不仅仅是标准流程。 可以添加角色(RBAC),属性(ABAC)等。
Casbin做什么
- 在经典的
{ 主体, 对象, 动作 }
形式或者你定义的自定义形式中执行策略。 支持允许和拒绝授权。 - 处理访问控制模型及其策略的存储。
- 管理角色-用户映射和角色-角色映射(也称为RBAC中的角色层次)。
- 支持内置的超级用户,如
root
或administrator
。 超级用户可以在没有明确权限的情况下做任何事情。 - 提供多个内置操作符以支持规则匹配。 例如,
keyMatch
可以将资源键/foo/bar
映射到模式/foo*
。
Casbin 不做什么
- 身份验证(也就是在用户登录时验证
用户名
和密码
) - 管理用户或角色列表。
对于项目来说,管理他们的用户、角色或密码列表更方便。 用户通常有他们的密码,而Casbin并未设计为密码容器。 然而,Casbin存储了RBAC场景下的用户-角色映射。