多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 工作原理 在 Casbin 中, 访问控制模型被抽象为基于**PERM**(Policy(策略), Effect(效果), Request(请求), Matcher(匹配器))的一个文件。 因此,切换或升级项目的授权机制与修改配置一样简单。 您可以通过组合可用的模型来定制您自己的访问控制模型。 例如,您可以在一个model中获得RBAC角色和ABAC属性,并共享一组policy规则。 Casbin中最基本、最简单的model是ACL。ACL中的model CONF为: ~~~ini # 请求定义 [request_definition] r = sub, obj, act # 策略定义 [policy_definition] p = sub, obj, act # 策略效果 [policy_effect] e = some(where (p.eft == allow)) # 匹配器 [matchers] m = r.sub == p.sub && r.obj == p.obj && r.act == p.act ~~~ ACL model的示例policy如下: ~~~ p, alice, data1, read p, bob, data2, write ~~~ 这表示: * alice可以读取data1 * bob可以编写data2 对于过长的单行配置,您也可以通过在结尾处添加“\\”进行断行: ~~~ini # 匹配器 [matchers] m = r.sub == p.sub && r.obj == p.obj \ && r.act == p.act ~~~ 此外,对于 ABAC,您在可以在 Casbin **golang**版本中尝试下面的 (jCasbin 和 Node-Casbin 尚不支持)操作: ~~~ini # 匹配器 [matchers] m = r.obj == p.obj && r.act == p.act || r.obj in ('data2', 'data3') ~~~ 但是你应确保数组的长度大于**1**,否则的话将会导致 panic 。 对于更多操作,你可以查看[govaluate](https://github.com/Knetic/govaluate)。