关于PyCasbin中StringAdapter类的使用方法咨询
关于PyCasbin中StringAdapter类的使用方法咨询
嘿,我之前也遇到过这个疑惑,其实StringAdapter是可以正常使用的,只是它的导入方式和你熟悉的那些适配器不太一样~
首先说正确的导入方式
StringAdapter并没有被导出到casbin.persist模块的顶层,你需要直接从它所在的子模块导入:
from casbin.adapters.string_adapter import StringAdapter
完整的使用示例
下面是一个完整的代码示例,展示如何用StringAdapter直接通过字符串定义并加载权限规则:
import casbin from casbin.adapters.string_adapter import StringAdapter # 1. 定义RBAC模型的字符串 model_str = """ [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 """ # 2. 定义权限规则的字符串,格式和本地policy文件完全一致 policy_str = """ p, alice, data1, read p, bob, data2, write g, alice, admin """ # 3. 初始化StringAdapter并创建Enforcer实例 adapter = StringAdapter(policy_str) e = casbin.Enforcer(model_str, adapter) # 4. 测试权限验证 print(e.enforce("alice", "data1", "read")) # 输出: True print(e.enforce("bob", "data1", "read")) # 输出: False print(e.enforce("alice", "data2", "write")) # 输出: True (alice是admin角色,匹配角色规则后拥有权限)
额外说明
- StringAdapter的设计场景就是直接用字符串快速加载权限规则,不需要依赖外部文件或数据库,适合测试、临时场景或者动态生成规则的情况。
- 你看到
dir(casbin.persist)里没有它,是因为PyCasbin只把一些常用的适配器(比如FileAdapter)导出到了persist模块顶层,小众场景的适配器需要直接从对应的子模块导入。
备注:内容来源于stack exchange,提问作者Blindfreddy
相关产品推荐
相关产品推荐

