当前位置:网站首页>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中不是
边栏推荐
猜你喜欢

Policy Evaluation收敛性、炼丹与数学家

【我的电赛日记(一)】HMI USART串口屏

FP6293电池升压5V-12V大电流2APWM模式升压方案

FP7195转模拟调光技术解决智能家居调光频闪和电感噪音的原理

没学好统计学的下场

FP5139电池与适配器供电DC-DC隔离升降压电路反激电路电荷泵电路原理图

Win11 computer off for a period of time without operating network how to solve

Win10系统设置application identity自动提示拒绝访问怎么办

【系统设计与实现】基于flink的分心驾驶预测与数据分析系统

FP7195转模拟恒流调光芯片在机器视觉光源的应用优势
随机推荐
FP6195耐压60V电流降压3.3V5V模块供电方案
2020-02-06-快速搭建个人博客
使用libcurl将Opencv Mat的图像上传到文件服务器,基于post请求和ftp协议两种方法
ASR6601牛羊定位器芯片GPS国内首颗支持LoRa的LPWAN SoC
“非图灵完备”到底意味着什么
How to reinstall Win7 system with U disk?How to reinstall win7 using u disk?
【使用Pytorch实现ResNet网络模型:ResNet50、ResNet101和ResNet152】
DP4056电源保护芯片锂电池pin对pinTP4056
推开机电的大门《电路》(二):功率计算与判断
GICv3/v4-软件概述
单端K总线收发器DP9637兼容L9637
Do Windows 10 computers need antivirus software installed?
win10无法直接用照片查看器打开图片怎么办
Binder ServiceManager解析
Makefile容易犯错的语法
用U盘怎么重装Win7系统?如何使用u盘重装系统win7?
CS4398音频解码替代芯片DP4398完全兼容DAC解码
pygame绘制弧线
What is Win10 God Mode for?How to enable God Mode in Windows 10?
LORA芯片ASR6505无线远距离传输8位MCU