当前位置:网站首页>casbin模型
casbin模型
2022-08-02 14:10:00 【星星泡个饭】
目录
一、PERM元模型
subject(sub访问实体),object (obj访问的资源) 和 action (act访问的方法) eft (策略结果 一般为空,默认指定allow) 还可以定义为deny
p:策略 一般存储到数据库,因为会有很多
e = some(where(p.eft = allow))
# 上面表示有任意一条 policy rule 满足, 则最终结果为 allow;p.eft它可以是allow或deny,它是可选的,默认是allow
m:匹配规则 会把r和p按照匹配原则进行匹配,从而返回匹配结果 (eft)如果不定义会返回allow 如果定义过了,会返回我们定义过的那个结果
r:请求
e:影响 这里的规定是定死的
e=some(where(p.eft==allow))这种情况下,我们的一个matchers匹配完成,得到了allow那么这条请求将被放行
e=some(where(p.eft==allow))&&!some(where(p.eft==deny)) 有一条通过并且没有一条deny
role_definition 角色域
g= _ , _ 表示以角色为基础,前者是后者的成员,拥有后者的权限
g= _ , _ , _ 表示以域为基础(多商户模式)
我定义一个策略,定义一个匹配规则,取获取通过这个请求过来的参数与策略,通过规则进行匹配,获得一个eft影响,拿到影响的结果进到影响的表达式返回一个布尔值
二、基础代码实现
步骤1.创建main.go
package main
import (
"fmt"
"github.com/casbin/casbin/v2"
)
func main() {
a, _ := gormadapter.NewAdapter("mysql", "数据库账号:数据库默吗[email protected](127.0.0.1:3306)/casbin", true)//连接数据库
e, _ := casbin.NewEnforcer("./model.conf", a)
sub := "xiaoqiao" // 想要访问资源的用户。
obj := "data1" // 将被访问的资源。
act := "read" // 用户对资源执行的操作。
//added, err := e.AddPolicy("xiaoqiao", "data1", "read")
//fmt.Println(added)
ok, err := e.Enforce(sub, obj, act)
if err != nil {
fmt.Println(err)
}
if ok == true {
fmt.Println("通过")
} else {
fmt.Println("未通过")
}
}
步骤2.创建model.conf
[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 = r.sub == p.sub && r.obj == p.obj && r.act == p.act
步骤3.创建policy.csv
p,xiaoqiao,data1,read
三、role_definition 角色域的用法
g = _, _的用法
1.model文件
[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act
2.policy文件
p, admin1, data, read
p, admin1, data, write
p, admin2, data, read
g, xiaoqiao, admin1
g, xiaoren, admin2
xiaoqiao拥有admin1的权限,因此可以对数据进行读和写
xiaoren拥有admin2的权限,因此只能对数据进行读
g = _, _,_的用法
1.model文件
[request_definition]
r = sub, dom, obj, act
[policy_definition]
p = sub, dom, obj, act
[role_definition]
g = _,_,_
# g2 = _,_,_ 表示用户, 角色/用户组, 域(也就是租户)
[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act
2.policy文件
p, admin, dom1, data1, read
p, admin, dom2, data2, read
g, xiaoqiao, admin, dom1
在dom1中,只有admin可以读取数据data1。
在dom2中,只有admin可以读取数据data2。
xiaoqiao在data1中是admin,但是在data2中不是
边栏推荐
- Spark及相关生态组件安装配置——快速回忆
- What should I do if the Win10 system sets the application identity to automatically prompt for access denied?
- 使用预训练语言模型进行文本生成的常用微调策略
- 为vscode配置clangd
- LORA芯片ASR6505无线远距离传输8位MCU
- 2.4G无线小模块CI24R1超低成本
- PyTorch①---加载数据、tensorboard的使用
- Impressions of Embrace Jetpack
- Binder ServiceManager解析
- PyTorch(12)---损失函数和反向传播
猜你喜欢
随机推荐
小T成长记-网络篇-1-什么是网络?
What is Win10 God Mode for?How to enable God Mode in Windows 10?
Please make sure you have the correct access rights and the repository exists. Problem solved
Win10上帝模式干嘛的?Win10怎么开启上帝模式?
FP5207电池升压 5V9V12V24V36V42V大功率方案
Daily - Notes
FP7195转模拟调光技术解决智能家居调光频闪和电感噪音的原理
Win10无法连接打印机怎么办?不能使用打印机的解决方法
基于无监督医学图像配准论文(1)
【使用Pytorch实现ResNet网络模型:ResNet50、ResNet101和ResNet152】
FP7128内置MOS降压恒流调光深度0.01%高辉共阳调光方案
使用npx -p @storybook/cli sb init安装失败,手把手搭建专属的storybook
Win10 Settings screen out from lack of sleep?Win10 set the method that never sleep
为vscode配置clangd
ASR6601牛羊定位器芯片GPS国内首颗支持LoRa的LPWAN SoC
为android系统添加产品的过程
没学好统计学的下场
yolov5官方代码解读——前向传播
PyTorch(13)---优化器_随机梯度下降法
2022TI杯D题混沌信号产生实验装置