You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.26 01:24:14