跳转到主要内容

策略存储

Casbin 中的策略存储由 adapter 负责。enforcer 通过 adapter API 加载以及(可选地)保存策略。

从 CSV 文件加载策略​

使用 CSV 文件是最简单的方案,很适合开发和示例场景。

示例:examples/rbac_policy.csv

p, alice, data1, read
p, bob, data2, write
p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, data2_admin
备注

如果字段中包含逗号,请用双引号把它包起来:

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。

Adapter API​

方法类型说明
LoadPolicy()basic从存储中加载全部策略规则
SavePolicy()basic把全部策略规则保存到存储
AddPolicy()optional向存储中添加一条策略规则
RemovePolicy()optional从存储中移除一条策略规则
RemoveFilteredPolicy()optional从存储中移除匹配过滤器的策略规则

数据库存储格式​

示例策略(CSV)

p, data2_admin, data2, read
p, data2_admin, data2, write
g, alice, admin

典型的数据库表结构(例如 MySQL)

idptypev0v1v2v3v4v5
1pdata2_admindata2read
2pdata2_admindata2write
3galiceadmin

各列含义

  • id — 主键(与具体 adapter 相关;不属于 Casbin 策略的一部分)。
  • ptype — 策略类型:p、g、g2 等。
  • v0–v5 — 按顺序排列的策略字段(对应 CSV 中从左到右的字段)。大多数 adapter 使用 6 列;有些支持更多列。如果需要额外字段,请查阅相应 adapter 的文档。

完整的 adapter API 与设计细节请见 Adapters。