lanlin/god

支持ACL、RBAC、ABAC的权威证明系统

2.0.0 2019-08-01 08:59 UTC

This package is auto-updated.

Last update: 2024-08-29 04:49:50 UTC


README

"神说,要有光,就有了光."

"神会决定你是否拥有权限."

"愿神保佑你!"

安装

composer require lanlin/god

起源

God项目是在参考了Casbin(golang)项目之后编写的,感谢他们的辛勤工作。

更多详细内容,请参阅Casbin的文档。

支持的模式

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

支持的适配器

  1. 文件适配器
  2. MongoDB适配器
  3. PHP PDO适配器(目前支持:MySQL、PostgreSQL、SQLite、SqlServer。)

它是如何工作的?

“谁”作为“角色”或“组”从“哪里”执行“操作”对“什么”得到“如何”?

访问控制模型被抽象为基于PERM元模型(策略、效果、请求、匹配器)的CONF文件。

因此,切换或升级项目的授权机制就像修改配置一样简单。

您可以通过组合可用的模型来自定义自己的访问控制模型。

例如,您可以在一个模型中同时获取RBAC角色和ABAC属性,并共享一组策略规则。

God中最基本和最简单的模型是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

演示

use God\God;

$God = new God('path/to/model.conf', 'path/to/policy.csv');

$God->allows('you', 'evil book', 'read');  // Does God allows you to do this?

new God();

new God(string $modelPath);

new God(string $modelPath, string $policyFile);

new God(string $modelPath, Adapter $adapter);

new God(Model $model);

new God(Model $model, Adapter $adapter);


// demo for mysql
$dbHost   = "127.0.0.1";
$dbPort   = 3306;
$dbName   = "your_database_name";
$username = "root";
$password = "your_password";

// php mysql pdo demo
$pdo = new \PDO("mysql:host={$dbHost};port={$dbPort};dbname={$dbName}", $username, $password);

// init god model with csv
$g = new God('tests/Examples/rbac_model.conf', 'tests/Examples/rbac_policy.csv');
$m = $g->getModel();

// save policy to database
$a = new Adapter($pdo);
$a->savePolicy($m);

有关更多用法演示,请查看单元测试或

Casbin中文文档

Casbin文档

许可协议

本项目采用MIT许可协议。