跳转至主要内容

Policy Storage

Casbin 的策略存储由 适配器 负责。 enforcer 通过适配器 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
备注

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)

idptypev0v1v2v3v4v5
1pdata2_admindata2read
2pdata2_admindata2write
3galiceadmin

列

  • id:主键(由适配器决定,不属于 Casbin 策略)。
  • ptype:策略类型:p、g、g2 等。
  • v0–v5:按顺序排列的策略字段(对应 CSV 中从左到右)。大多数适配器使用 6 列,有些支持更多。需要更多字段时请查阅适配器的文档。

完整的适配器 API 和设计细节见 适配器。