当前位置:网站首页>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中不是
边栏推荐
猜你喜欢
随机推荐
DP1101兼容CC1101是SUB1GHz无线收发芯片应用于智能家居
FP6296锂电池升压 5V9V12V内置 MOS 大功率方案原理图
【系统设计与实现】基于flink的分心驾驶预测与数据分析系统
Win11 computer off for a period of time without operating network how to solve
Tensorflow常用函数
将SSE指令转换为ARM NEON指令
What is Win10 God Mode for?How to enable God Mode in Windows 10?
LORA芯片ASR6505无线远距离传输8位MCU
SQL的通用语法和使用说明(图文)
【我的电赛日记(二)】ADF4351锁相环模块
推开机电的大门《电路》(一):电压,电流,参考方向
PyTorch⑦---卷积神经网络_非线性激活
FP7195大功率零压差全程无频闪调光DC-DC恒流芯片(兼容调光器:PWM调光,无极调光,0/1-10V调光)
网络安全抓包
Tensorflow张量生成
Win10 cannot directly use photo viewer to open the picture
FP7195芯片PWM转模拟调光至0.1%低亮度时恒流一致性的控制原理
What should I do if the Win10 system sets the application identity to automatically prompt for access denied?
Win11没有本地用户和组怎么解决
【我的电赛日记(三)】STM32学习笔记与要点总结









