# 概述
Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。
## Casbin支持以下编程语言:
| [![golang](https://img.kancloud.cn/13/0c/130c8531535dbdc6f4be309dce1abe6b_480x251.png)](https://github.com/casbin/casbin) | [![java](https://img.kancloud.cn/46/fc/46fc68e8a0136c852657994ef40ff827_480x240.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://img.kancloud.cn/98/42/9842a8bc5fc27d8f17d8afe2ffc9889d_480x293.png)](https://github.com/casbin/node-casbin) | [![php](https://img.kancloud.cn/3f/9d/3f9d70791f9b93fbac94bbb2c29b7045_480x259.png)](https://github.com/php-casbin/php-casbin) |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| [Casbin](https://github.com/casbin/casbin) | [jCasbin](https://github.com/casbin/jcasbin) | [node-Casbin](https://github.com/casbin/node-casbin) | [PHP-Casbin](https://github.com/php-casbin/php-casbin) |
| 可用于生产环境 | 可用于生产环境 | 可用于生产环境 | 可用于生产环境 |
| [![python](https://img.kancloud.cn/ff/55/ff55d26d87394b8ba223f8df128ecc0e_480x142.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://img.kancloud.cn/00/b3/00b3c6736e191082f69f4370d0bac6cf_480x144.png)](https://github.com/casbin-net/Casbin.NET) | [![delphi](https://img.kancloud.cn/eb/df/ebdf5a5ce40ad4864edaf4049e9bc1b5_480x160.png)](https://github.com/casbin4d/Casbin4D) | [![rust](https://img.kancloud.cn/da/9a/da9ad056ea518af320e765a050fbb04f_480x240.png)](https://github.com/casbin/casbin-rs) |
| ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ | ------------------------------------------------------------ |
| [PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin4D](https://github.com/casbin4d/Casbin4D) | [Casbin-RS](https://github.com/casbin/casbin-rs) |
| production-ready | production-ready | experimental | WIP |
## Feature set for different languages
| Feature | Go | Java | Node.js | PHP | Python | C# | Delphi |
| --- | --- | --- | --- | --- | --- | --- | --- |
| Enforcement | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| RBAC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| ABAC | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Adapter | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Management API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| RBAC API | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Filtered Adapter | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ | ❌ |
| Watcher | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
| Role Manager | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ |
| Multi-Threading | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ❌ |
我们一直致力于让Casbin在不同的编程语言中拥有相同的特性。 但是现实总是不完美的。 上方的表格展示了当前的进度。 Watcher或者Role Manager的✅ 仅代表Casbin对该编程语言有接口。 而是否实现了watcher或者role manager则是另一回事了。
## Casbin是什么?
Casbin可以做到:
1. 支持自定义请求的格式,默认的请求格式为`{subject, object, action}`。
2. 具有访问控制模型model和策略policy两个核心概念。
3. 支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。
4. 支持超级用户,如`root`或`Administrator`,超级用户可以不受授权策略的约束访问任意资源。
5. 支持多种内置的操作符,如`keyMatch`,方便对路径式的资源进行管理,如`/foo/bar`可以映射到`/foo*`
Casbin不能做到:
1. 身份认证 authentication(即验证用户的用户名、密码),casbin只负责访问控制。应该有其他专门的组件负责身份认证,然后由casbin进行访问控制,二者是相互配合的关系。
2. 管理用户列表或角色列表。 Casbin 认为由项目自身来管理用户、角色列表更为合适, 用户通常有他们的密码,但是 Casbin 的设计思想并不是把它作为一个存储密码的容器。 而是存储RBAC方案中用户和角色之间的映射关系。