apache/casbin

GitHub: apache/casbin

一个支持 ACL、RBAC、ABAC 等多种访问控制模型的多语言授权库,将权限模型抽象为配置文件以实现灵活的授权管理。

Stars: 20264 | Forks: 1752

# Apache Casbin [![Go Report Card](https://goreportcard.com/badge/github.com/apache/casbin)](https://goreportcard.com/report/github.com/apache/casbin) [![Build](https://static.pigsec.cn/wp-content/uploads/repos/cas/3b/3b39c55110f11a97d10cda63d1c1193c1b78ee3e26d559adaea16b191fc65e8a.svg)](https://github.com/apache/casbin/actions/workflows/default.yml) [![Coverage Status](https://coveralls.io/repos/github/apache/casbin/badge.svg?branch=master)](https://coveralls.io/github/apache/casbin?branch=master) [![Godoc](https://godoc.org/github.com/apache/casbin?status.svg)](https://pkg.go.dev/github.com/casbin/casbin/v2) [![Release](https://img.shields.io/github/release/apache/casbin.svg)](https://github.com/apache/casbin/releases/latest) [![Discord](https://img.shields.io/discord/1022748306096537660?logo=discord&label=discord&color=5865F2)](https://discord.gg/S5UjpzGZjN) [![Sourcegraph](https://sourcegraph.com/github.com/apache/casbin/-/badge.svg)](https://sourcegraph.com/github/apache/apache/casbin?badge) **新闻**:还在为如何编写正确的 Apache Casbin 策略而烦恼吗?``Apache Casbin 在线编辑器``来帮您!请在:https://casbin.apache.org/editor/ 体验 ![casbin Logo](https://static.pigsec.cn/wp-content/uploads/repos/cas/f1/f1c734a61313d25ce6dc131b2aa4886e1c6d2c9e68aa5e165f8fb1e2d2ca0b88.png) Apache Casbin 是一个专为 Golang 项目打造的强大且高效的开源访问控制库。它支持基于各种[访问控制模型](https://en.wikipedia.org/wiki/Computer_security_model)来执行授权。 ## Apache Casbin 支持的所有语言: | [![golang](https://casbin.apache.org/img/langs/golang.png)](https://github.com/apache/casbin) | [![java](https://casbin.apache.org/img/langs/java.png)](https://github.com/casbin/jcasbin) | [![nodejs](https://casbin.apache.org/img/langs/nodejs.png)](https://github.com/casbin/node-casbin) | [![php](https://casbin.apache.org/img/langs/php.png)](https://github.com/php-casbin/php-casbin) | |------------------------------------------------------------------------------------------------|---------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------|--------------------------------------------------------------------------------------------------| | [Casbin](https://github.com/apache/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://casbin.apache.org/img/langs/python.png)](https://github.com/casbin/pycasbin) | [![dotnet](https://casbin.apache.org/img/langs/dotnet.png)](https://github.com/casbin-net/Casbin.NET) | [![c++](https://casbin.apache.org/img/langs/cpp.png)](https://github.com/casbin/casbin-cpp) | [![rust](https://casbin.apache.org/img/langs/rust.png)](https://github.com/casbin/casbin-rs) | |--------------------------------------------------------------------------------------------------|-------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------|-----------------------------------------------------------------------------------------------| | [PyCasbin](https://github.com/casbin/pycasbin) | [Casbin.NET](https://github.com/casbin-net/Casbin.NET) | [Casbin-CPP](https://github.com/casbin/casbin-cpp) | [Casbin-RS](https://github.com/casbin/casbin-rs) | | 生产就绪 | 生产就绪 | 生产就绪 | 生产就绪 | ## 目录 - [支持的模型](#supported-models) - [工作原理?](#how-it-works) - [功能](#features) - [安装说明](#installation) - [文档](#documentation) - [在线编辑器](#online-editor) - [教程](#tutorials) - [快速入门](#get-started) - [策略管理](#policy-management) - [策略持久化](#policy-persistence) - [多节点间的策略一致性](#policy-consistence-between-multiple-nodes) - [角色管理器](#role-manager) - [基准测试](#benchmarks) - [示例](#examples) - [中间件](#middlewares) - [我们的使用者](#our-adopters) ## 支持的模型 1. [**ACL (访问控制列表)**](https://en.wikipedia.org/wiki/Access_control_list) 2. **带[超级用户](https://en.wikipedia.org/wiki/Superuser)的 ACL** 3. **不带用户的 ACL**:特别适用于没有身份验证或用户登录的系统。 4. **不带资源的 ACL**:某些场景可能通过使用诸如 ``write-article``、``read-log`` 等权限来针对某一类型的资源,而不是单个资源。它不控制对特定文章或日志的访问。 5. **[RBAC (基于角色的访问控制)](https://en.wikipedia.org/wiki/Role-based_access_control)** 6. **带资源角色的 RBAC**:用户和资源可以同时拥有角色(或组)。 7. **带域/租户的 RBAC**:用户可以针对不同的域/租户拥有不同的角色集合。 8. **[ABAC (基于属性的访问控制)](https://en.wikipedia.org/wiki/Attribute-Based_Access_Control)**:可以使用诸如 ``resource.Owner`` 之类的语法糖来获取资源的属性。 9. **[RESTful](https://en.wikipedia.org/wiki/Representational_state_transfer)**:支持诸如 ``/res/*``、``/res/:id`` 的路径以及诸如 ``GET``、``POST``、``PUT``、``DELETE`` 的 HTTP 方法。 10. **拒绝覆盖**:同时支持允许和拒绝授权,且拒绝优先于允许。 11. **优先级**:策略规则可以像防火墙规则一样设置优先级。 ## 工作原理? 在 Casbin 中,访问控制模型基于 **PERM 元模型 (Policy, Effect, Request, Matchers)** 被抽象为一个 CONF 文件。因此,切换或升级项目的授权机制就像修改配置一样简单。您可以通过组合可用的模型来自定义您的访问控制模型。例如,您可以在一个模型中同时使用 RBAC 角色和 ABAC 属性,并共享一组策略规则。 Casbin 中最基本、最简单的模型是 ACL。ACL 的模型 CONF 为: ``` # 请求定义 [request_definition] r = sub, obj, act # Policy 定义 [policy_definition] p = sub, obj, act # Policy effect [policy_effect] e = some(where (p.eft == allow)) # Matchers [matchers] m = r.sub == p.sub && r.obj == p.obj && r.act == p.act ``` ACL 模型的一个示例策略如下: ``` p, alice, data1, read p, bob, data2, write ``` 它表示: - alice 可以读取 data1 - bob 可以写入 data2 我们还通过在末尾添加 '\\' 来支持多行模式: ``` # Matchers [matchers] m = r.sub == p.sub && r.obj == p.obj \ && r.act == p.act ``` 此外,如果您使用的是 ABAC,您可以在 Casbin **golang** 版本中尝试使用 `in` 运算符(目前 jCasbin 和 Node-Casbin 暂不支持): ``` # Matchers [matchers] m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3') ``` 但您**必须**确保数组的长度**大于** **1**,否则会导致 panic。 如需了解更多运算符,您可以查看 [govaluate](https://github.com/casbin/govaluate) ## 功能 Apache Casbin 所做的事: 1. 以经典的 ``{subject, object, action}`` 形式或您自定义的形式执行策略,同时支持允许和拒绝授权。 2. 处理访问控制模型及其策略的存储。 3. 管理角色-用户映射和角色-角色映射(即 RBAC 中的角色层级)。 4. 支持诸如 ``root`` 或 ``administrator`` 的内置超级用户。超级用户无需显式权限即可执行任何操作。 5. 提供多种内置运算符以支持规则匹配。例如,``keyMatch`` 可以将资源键 ``/foo/bar`` 映射到模式 ``/foo*``。 Apache Casbin 不做的事: 1. 身份验证(即验证用户登录时的 ``username`` 和 ``password``) 2. 管理用户或角色列表。我相信由项目本身来管理这些实体会更方便。用户通常有自己的密码,而 Apache Casbin 并非设计为密码容器。然而,Apache Casbin 会存储 RBAC 场景下的用户-角色映射。 ## 安装 ``` go get github.com/casbin/casbin/v3 ``` ## 文档 https://casbin.apache.org/docs/overview ## 在线编辑器 您还可以使用在线编辑器 (https://casbin.apache.org/editor/) 在 Web 浏览器中编写您的 Casbin 模型和策略。它提供了诸如 ``语法高亮`` 和 ``代码补全`` 等功能,就像编程语言的 IDE 一样。 ## 教程 https://casbin.apache.org/docs/tutorials ## 快速入门 1. 使用模型文件和策略文件新建一个 Casbin enforcer: e, _ := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv") 注意:您也可以使用数据库中的策略而不是文件来初始化 enforcer,详情请参阅[策略持久化](#policy-persistence)部分。 2. 在访问发生之前,将执行钩子添加到您的代码中: sub := "alice" // 想要访问资源的用户。 obj := "data1" // 将要被访问的资源。 act := "read" // 用户对资源执行的操作。 if res, _ := e.Enforce(sub, obj, act); res { // 允许 alice 读取 data1 } else { // 拒绝请求,显示错误 } 3. 除了静态策略文件外,Apache Casbin 还提供了在运行时管理权限的 API。例如,您可以获取分配给用户的所有角色,如下所示: roles, _ := e.GetImplicitRolesForUser(sub) 更多用法请参阅[策略管理 API](#policy-management)。 ## 策略管理 Apache Casbin 提供了两套 API 来管理权限: - [管理 API](https://casbin.apache.org/docs/management-api):提供对 Apache Casbin 策略管理全面支持的基础 API。 - [RBAC API](https://casbin.apache.org/docs/rbac-api):对 RBAC 更加友好的 API。此 API 是管理 API 的子集。RBAC 用户可以使用此 API 来简化代码。 我们还提供了一个基于 Web 的 [UI 界面](https://casbin.apache.org/docs/admin-portal),用于模型管理和策略管理: ![模型编辑器](https://hsluoyz.github.io/casbin/ui_model_editor.png) ![策略编辑器](https://hsluoyz.github.io/casbin/ui_policy_editor.png) ## 策略持久化 https://casbin.apache.org/docs/adapters ## 多节点间的策略一致性 https://casbin.apache.org/docs/watchers ## 角色管理器 https://casbin.apache.org/docs/role-managers ## 基准测试 https://casbin.apache.org/docs/benchmark ## 示例 | 模型 | 模型文件 | 策略文件 | |---------------------------|----------------------------------------------------------------------------------------------------------------------------------|----------------------------------------------------------------------------------------------------------------------------------| | ACL | [basic_model.conf](https://github.com/apache/casbin/blob/master/examples/basic_model.conf) | [basic_policy.csv](https://github.com/apache/casbin/blob/master/examples/basic_policy.csv) | | 带超级用户的 ACL | [basic_model_with_root.conf](https://github.com/apache/casbin/blob/master/examples/basic_with_root_model.conf) | [basic_policy.csv](https://github.com/apache/casbin/blob/master/examples/basic_policy.csv) | | 不带用户的 ACL | [basic_model_without_users.conf](https://github.com/apache/casbin/blob/master/examples/basic_without_users_model.conf) | [basic_policy_without_users.csv](https://github.com/apache/casbin/blob/master/examples/basic_without_users_policy.csv) | | 不带资源的 ACL | [basic_model_without_resources.conf](https://github.com/apache/casbin/blob/master/examples/basic_without_resources_model.conf) | [basic_policy_without_resources.csv](https://github.com/apache/casbin/blob/master/examples/basic_without_resources_policy.csv) | | RBAC | [rbac_model.conf](https://github.com/apache/casbin/blob/master/examples/rbac_model.conf) | [rbac_policy.csv](https://github.com/apache/casbin/blob/master/examples/rbac_policy.csv) | | 带资源角色的 RBAC | [rbac_model_with_resource_roles.conf](https://github.com/apache/casbin/blob/master/examples/rbac_with_resource_roles_model.conf) | [rbac_policy_with_resource_roles.csv](https://github.com/apache/casbin/blob/master/examples/rbac_with_resource_roles_policy.csv) | | 带域/租户的 RBAC | [rbac_model_with_domains.conf](https://github.com/apache/casbin/blob/master/examples/rbac_with_domains_model.conf) | [rbac_policy_with_domains.csv](https://github.com/apache/casbin/blob/master/examples/rbac_with_domains_policy.csv) | | ABAC | [abac_model.conf](https://github.com/apache/casbin/blob/master/examples/abac_model.conf) | N/A | | RESTful | [keymatch_model.conf](https://github.com/apache/casbin/blob/master/examples/keymatch_model.conf) | [keymatch_policy.csv](https://github.com/apache/casbin/blob/master/examples/keymatch_policy.csv) | | 拒绝覆盖 | [rbac_model_with_deny.conf](https://github.com/apache/casbin/blob/master/examples/rbac_with_deny_model.conf) | [rbac_policy_with_deny.csv](https://github.com/apache/casbin/blob/master/examples/rbac_with_deny_policy.csv) | | 优先级 | [priority_model.conf](https://github.com/apache/casbin/blob/master/examples/priority_model.conf) | [priority_policy.csv](https://github.com/apache/casbin/blob/master/examples/priority_policy.csv) | ## 中间件 Web 框架的 Authz 中间件:https://casbin.apache.org/docs/middlewares ## 我们的使用者 https://casbin.apache.org/docs/adopters ## 许可证 本项目基于 [Apache 2.0 许可证](LICENSE) 授权。 ## 联系我们 如果您有任何问题或功能请求,请联系我们。欢迎提交 PR。 - https://github.com/apache/casbin/issues - https://discord.gg/S5UjpzGZjN
标签:EVTX分析, Golang, JS文件枚举, MITM代理, RBAC, Streamlit, XML 请求, 可视化界面, 安全开发, 安全编程, 授权库, 日志审计, 访问控制, 逆向工具