开源技术小栈开源技术小栈
🌐 Home
⛄ 精选文章
🐜 数据库
Ⓜ️ 微服务
📺 Bilibili
🐳 Github
🎃 腾讯云社区
💫 博客园
  • 💫 Git
  • 🐜 Linux
  • 🕸️ Docker
  • 🐌 Jenkins
🌐 Home
⛄ 精选文章
🐜 数据库
Ⓜ️ 微服务
📺 Bilibili
🐳 Github
🎃 腾讯云社区
💫 博客园
  • 💫 Git
  • 🐜 Linux
  • 🕸️ Docker
  • 🐌 Jenkins
  • 队列

    • 🔷 十万个为什么?
  • Casbin

    • 🔷 快速开始
    • 🔶 工作原理
    • 🔷 Model语法策略
    • 🔶 Model高级
    • 🔷 策略高级
    • 🔶 快速开始
  • Zipkin链路追踪

    • 🔷 概述
    • 🔶 快速开始
    • 🔷 webman框架实战

概念

Casbin中最核心的三个概念:Model, Policy, Enforcer。

Model就是一个CONF文件,基于PERM metamodel (Policy, Effect, Request, Matchers)。

Policy是动态存储policy rules的,可以存在.csv文件或数据库中。

Enforcer决定一个"subject"对一个"object"是否有"action"的权限。

安装

通过composer安装:

composer require casbin/casbin

使用

创建 model.conf 和 policy.csv 文件:

model.conf:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

policy.csv:

p, alice, data1, read
p, bob, data2, write

创建一个Casbin决策器需要有一个模型文件和策略文件为参数:

require_once './vendor/autoload.php';

use Casbin\Enforcer;

$e = new Enforcer("path/to/model.conf", "path/to/policy.csv");

在需要进行访问控制的位置,通过以下代码进行权限验证:

$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) {
    // 允许 alice 读取 data1
} else {
    // 拒绝请求, 显示错误
}
最近更新: 2024/4/4 16:33
贡献者: Tinywan
Next
🔶 工作原理