casbin/casbin

为 PHP 项目提供强大而高效的开放源代码访问控制库。

资助包维护!
Open Collective

安装量: 777 809

依赖项: 65

建议者: 0

安全性: 0

星标: 1 204

关注者: 51

分支: 127

开放问题: 2


README

Scrutinizer Code Quality Default Coverage Status Latest Stable Version Total Downloads License Discord

文档 | 教程 | 扩展

Breaking News: Laravel-authz 现在可用,是一个 Laravel 框架的授权库。

PHP-Casbin 是一个强大而高效的 PHP 项目开放源代码访问控制库。它提供了根据各种 访问控制模型 执行授权的支持。

Casbin 所支持的所有语言

安装

在项目的 composer.json 中要求此包。这将下载该包

composer require casbin/casbin

开始使用

  1. 使用模型文件和政策文件创建一个 Casbin 执法器
require_once './vendor/autoload.php';

use Casbin\Enforcer;

$e = new Enforcer("path/to/model.conf", "path/to/policy.csv");
  1. 在访问发生之前将执行钩子添加到您的代码中
$sub = "alice"; // the user that wants to access a resource.
$obj = "data1"; // the resource that is going to be accessed.
$act = "read"; // the operation that the user performs on the resource.

if ($e->enforce($sub, $obj, $act) === true) {
    // permit alice to read data1
} else {
    // deny the request, show an error
}

目录

支持的模型

  1. ACL(访问控制列表)
  2. 超级用户 的 ACL
  3. 无用户 ACL:特别适用于没有身份验证或用户登录的系统。
  4. 无资源 ACL:某些场景可能通过使用权限(如 write-articleread-log)针对资源类型而不是单个资源进行目标定位。它不控制对特定文章或日志的访问。
  5. RBAC(基于角色的访问控制)
  6. 带资源角色的 RBAC:用户和资源可以同时拥有角色(或组)。
  7. 带域/租户的 RBAC:用户可以为不同的域/租户拥有不同的角色集。
  8. ABAC(基于属性的访问控制):可以使用 resource.Owner 这样的语法糖来获取资源的属性。
  9. RESTful:支持路径如 /res/*/res/:id 和 HTTP 方法如 GETPOSTPUTDELETE
  10. Deny-override:支持允许和拒绝授权,拒绝优先于允许。
  11. 优先级:策略规则可以被优先级排序,就像防火墙规则一样。

它是如何工作的?

在 php-casbin 中,访问控制模型被抽象为一个基于 PERM 元模型(策略、效果、请求、匹配器) 的 CONF 文件。因此,切换或升级项目的授权机制就像修改配置一样简单。您可以通过组合可用的模型来自定义自己的访问控制模型。例如,您可以在一个模型中将 RBAC 角色和 ABAC 属性结合起来,并共享一组策略规则。

php-casbin 中最基本的模型是 ACL。ACL 的模型 CONF 是

# Request definition
[request_definition]
r = sub, obj, act

# Policy definition
[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

功能

php-casbin的功能:

  1. 在经典格式{主体,对象,动作}或自定义格式中执行策略,支持允许和拒绝授权。
  2. 处理访问控制模型及其策略的存储。
  3. 管理角色-用户映射和角色-角色映射(即RBAC中的角色层次结构)。
  4. 支持内置超级用户,如root管理员。超级用户可以执行任何操作而无需显式权限。
  5. 提供多个内置运算符以支持规则匹配。例如,keyMatch可以将资源键/foo/bar映射到模式/foo*

php-casbin不做什么:

  1. 身份验证(即在用户登录时验证用户名密码
  2. 管理用户或角色列表。我相信项目本身管理这些实体更方便。用户通常有自己的密码,php-casbin并非设计为密码容器。然而,php-casbin为RBAC场景存储用户-角色映射。

文档

https://casbin.org/docs/en/overview

在线编辑器

您还可以使用在线编辑器(http://casbin.org/editor/)在您的浏览器中编写php-casbin模型和策略。它提供类似于编程语言IDE的功能,如语法高亮代码补全

教程

https://casbin.org/docs/tutorials

策略管理

php-casbin提供了两组API来管理权限:

  • 管理API:提供对php-casbin策略管理全面支持的原始API。
  • RBAC API:针对RBAC的更友好API。此API是管理API的子集。RBAC用户可以使用此API简化代码。

model editor

policy editor

策略持久化

https://casbin.org/docs/en/adapters

角色管理器

https://casbin.org/docs/en/role-managers

示例

中间件

适用于Web框架的Authz中间件:[https://casbin.org/docs/en/middlewares]

我们的采用者

https://casbin.org/docs/en/adopters

贡献者

本项目得以存在,要感谢所有贡献者。

支持者

感谢所有支持者!🙏 [成为支持者]

赞助商

通过成为赞助商来支持此项目。您的标志将在此处显示,并提供到您网站的链接。[成为赞助商]

许可

本项目采用Apache 2.0许可协议

联系方式

如果您有任何问题或功能请求,请与我们联系。欢迎提交PR。