在Go语言的Casbin中能否直接从字符串加载策略(替代CSV文件)
从字符串直接加载Casbin策略的实现方法
当然可以,Casbin支持直接从字符串加载策略,无需依赖CSV文件。你可以借助内存适配器(MemoryAdapter)配合字符串形式的策略内容实现,逻辑和你加载模型字符串的方式类似。
示例代码
package main import ( "fmt" "github.com/casbin/casbin/v2" "github.com/casbin/casbin/v2/model" "github.com/casbin/casbin/v2/persist" ) func main() { // 加载模型字符串 modelText := ` [request_definition] r = sub, obj, act [policy_definition] p = sub, obj, act [role_definition] g = _, _ [policy_effect] e = some(where (p.eft == allow)) [matchers] m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act ` m, _ := model.NewModelFromString(modelText) // 定义策略字符串,格式与CSV文件一致,每行一条策略规则 policyText := ` p, alice, data1, read p, bob, data2, write g, alice, admin ` // 初始化内存适配器并加载策略字符串 adapter := persist.NewMemoryAdapter() adapter.LoadPolicyFromStrings(policyText, m) // 创建Enforcer并使用策略 e, _ := casbin.NewEnforcer(m, adapter) // 测试权限验证 ok, _ := e.Enforce("alice", "data1", "read") fmt.Println(ok) // 输出: true ok, _ = e.Enforce("bob", "data1", "read") fmt.Println(ok) // 输出: false }
关键说明
- 策略字符串的格式和CSV文件完全一致:每行一条规则,前缀
p表示普通策略,g表示角色继承关系,后续为规则参数 - 使用
persist.NewMemoryAdapter()创建内存适配器,通过LoadPolicyFromStrings方法将字符串策略加载到模型中 - 完成加载后,即可正常初始化Enforcer并进行权限校验
内容的提问来源于stack exchange,提问作者Akshay
相关产品推荐
相关产品推荐

