Policy Storage
Casbin 的策略存储由 适配器 负责。 enforcer 通过适配器 API 加载(以及可选地保存)策略。
从 CSV 文件加载策略
使用 CSV 文件是最简单的方式,适合开发和示例。
p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin
备注
If a field contains commas, wrap it in double quotes:
p, alice, "data1,data2", read --correct
p, alice, data1,data2, read --incorrect (the whole phrase "data1,data2" should be wrapped in double quotes)
如果某个字段同时包含逗号和双引号,用双引号把它括起来,并把内部的引号写成两个来转义:
p, alice, data, "r.act in (""get"", ""post"")" --correct
p, alice, data, "r.act in ("get", "post")" --incorrect (you should use "" to escape "")
见 casbin#886。
适配器API
| 方法 | 类型 | 描述 |
|---|---|---|
| LoadPolicy() | 基础 | 从存储中加载所有策略规则 |
| SavePolicy() | 基础 | 将所有策略规则保存到存储中 |
| AddPolicy() | 可选 | 将策略规则添加到存储中 |
| RemovePolicy() | 可选 | 从存储中删除策略规则 |
| RemoveFilteredPolicy() | 可选 | 从存储中删除与过滤器匹配的策略规则 |
数据库存储格式
策略示例(CSV)
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, admin
典型的数据库表结构(例如 MySQL)
| id | ptype | v0 | v1 | v2 | v3 | v4 | v5 |
|---|---|---|---|---|---|---|---|
| 1 | p | data2_admin | data2 | read | |||
| 2 | p | data2_admin | data2 | write | |||
| 3 | g | alice | admin |
列
- id:主键(由适配器决定,不属于 Casbin 策略)。
- ptype:策略类型:
p、g、g2等。 - v0–v5:按顺序排列的策略字段(对应 CSV 中从左到右)。大多数适配器使用 6 列,有些支持更多。需要更多字段时请查阅适配器的文档。
完整的适配器 API 和设计细节见 适配器。