首页 > 其他分享 >casbin的详细理解过程(附图片理解)(rbac模型)

casbin的详细理解过程(附图片理解)(rbac模型)

时间:2024-07-15 17:33:39浏览次数:7  
标签:definition obj sub casbin eft rbac 理解 && act

摘自:https://blog.csdn.net/weixin_51991615/article/details/123696937

一、casbin模型
casbin模型又叫PERM模型: subject(sub 访问实体),object(obj访问的资源)和action(act访问方法)eft(策略结果,一般为空 默认指定allow)还可以定义为deny

1)Policy策略 ——— p = {sub, obj, act, eft}
1、策略一般存储到数据库,因为会有很多

2、

[policy_definition] p = sub, obj, act


2)Matchers 匹配规则 Request和Policy的匹配规则
1、

m = r.sub == p.sub && r.act == p.act && r.obj == p.obj

2、r 请求 p 策略

3、这时候会把r和p按照上述描述进行匹配,从而返回匹配结果(eft)如果不定义会返回allow,如果定义过了,会返回我们定义过的那个结果

 

3)Effect影响
1、它决定我们是否可以放行
e = some(where(p.eft == allow)) 这种情况下我们的一个matches匹配完成,得到了allow那么这条请求将被放行

e = some(where(p.eft == allow)) && !some(where(p.eft == deny))

​ 这里的规定是定死的

 

4)Requset请求 r = {sub, obj, act}
下面我们图解用法:

 


运行这个run the test,可以发现,为true。因为在第一行,alice有读的操作。(见图一)但是我们将read改为write,返回的就是false。(见图二)

 

 (图一)

 

 (图二)

 

二、role_definition 角色域
1)g = _ , _ 表示以角色为基础

 


带角色域匹配,alice可以 == data2_admin使用,alice也可以是他自己

2)g = _ , _ , _ 表示以域为基础(多商户模式)


三、用俗语解释一下上面代码
以角色为基础

[request_definition]

r = sub, obj, act

意思:请求入参(实体,资源,方法)

 

[policy_definition]

p = sub, obj, act

意思:策略(实体,资源,方法)

 

[role_definition]

g = _ , _



意思:这个情况下,g写什么都可以,毕竟match里面根本没有涉及到g,不过我们规范一点,按照角色权限,这里的意思是g收到两个参数 g = 用户,角色

 

[policy_effect]

e = some(where (p.eft == allow))



意思:看看经过下面那些匹配规则后的返回值是否有一条等于里面那个allow


[matchers]

m = r.sub == p.sub && ParamsMatch(r.obj, p.obj) && r.act == p.act

意思:进来的实体,资源,方法,能不能在权限表(p)里面找到一个一模一样的

 

四、多租户模型
[request_definition] r = sub, dom, obj, act

意思:入参(实体,域【商户】,资源,方法)

[policy_definition] p = sub, dom, obj, act

意思:权限模型(实体,域【商户】,资源,方法)

[role_definition] g = _ , _ , _

意思:域匹配规则,后面g会说,这里意思是g收三个参数

[matchers] m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act

 


先列出来一个权限定义里面的东西

g, qm, teacher, classOne

然后用g做一些解析动作

一般我们会收到前端的入参, 大概是这个样子:“qm",“classOne”,“/base/api/”,“get”

上面我们定义的g就是我们需要的模型,经过g以后,g已经把我们的入参 qm 解析成了 r.sub 为 teacher r.rom 为classone先从这个商户找一下角色,找到就过了,然后用dom去匹配,然后用一个类似于这样的请求,去策略里面找teacher,classOne, /api/base,get

 

四、练习测试
1、在ACL模型中,下列案例可以通过吗

答案:false,根本找不到

 

2、在RBAC模型中,下列案例是否可以通过?

答案:true

那假如在添加一条:bob,data2,write可以通过吗?

 

答案:true,因为bob,data2,write本身就有这一条操作

再添加一条记录,如下图所示

 

 

3、多商户模型

 


在这个案例中,alice和domain2找到了admin,但是,domain2找不到data1,所以是false

对于g的理解:g:人-组-域,区别看,人可以进多个组多个域,但是data1/data2有不同权限来判断

标签:definition,obj,sub,casbin,eft,rbac,理解,&&,act
From: https://www.cnblogs.com/LiuYanYGZ/p/18303595

相关文章

  • OpenAI 曝新项目「草莓」,提升 AI 推理能力;智谱 AI 开源视频理解模型丨 RTE 开发者日报
      开发者朋友们大家好: 这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(Real-TimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢......
  • 快速排序模板及其理解
    快速排序在面试中经常用于考察面试者的代码能力,以下是我个人对如何手撕快排的一些理解:原理:快速排序的解决分为两个部分,分区(partition)和递归(recurse)。分区是主要进行排序的功能,递归用于控制分区的次数。分区的思想是:选定一个数,将所有小于这个数的数组元素都放在它的左侧,同理......
  • 【AI原理解析】—KAN原理
    目录一、理论基础与数学表示二、网络结构与特点1.权重与激活函数的创新2.节点与边的角色3.B样条表示三、学习机制与训练过程四、优势与应用1.优势2.应用五、未来展望Kolmogorov-ArnoldNetworks(KANs)是一种创新的神经网络架构,其独特的设计使其在处理复杂函数......
  • Python 集合:深入理解与应用
    一、引言1.在Python编程中,集合(Set)是一种强大而有用的数据结构。它具有独特的特性,适用于解决各种问题,特别是在处理不重复元素和集合操作时。二、集合的创建#使用花括号创建集合set1={1,2,3,4,5}#使用set()函数创建集合set2=set([5,6,7,8,9])三、集合......
  • 深入理解Java中的String类
    深入理解Java中的String类大家好,我是微赚淘客系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在这篇文章中,我将详细介绍Java中的String类,并结合实际代码示例,帮助大家更好地理解和应用String类。1.String类概述String类是Java中最常用的类之一,用于表示不可变的字符序列。St......
  • Java中的Filter流:理解与应用
    Java中的Filter流:理解与应用1、字节Filter流1.1FilterInputStream1.2FilterOutputStream2、字符Filter流2.1FilterReader2.2FilterWriter3、使用Filter流的好处......
  • 每日一问,请你谈一谈你对HashMap的理解。
    HashMap底层是数组加链表的结构,在jdk1.8之后又加入了红黑树。当添加一个元素(key-value)时,首先计算键值对的key的hash值,以此来确定插入到数组中的位置;允许有null值和null键。如果根据hash值确定的数组位置中已经存在元素,就添加到同一个hash值的元素的后面,于是形成了链表;Entry也就......
  • 如何理解electron 的预加载脚本
    在Electron应用中,预加载脚本(PreloadScript)是一个非常重要的概念,它允许你在渲染进程(web页面)和主进程之间创建一个安全的桥梁。预加载脚本运行在Node.js环境中,但位于渲染进程的一个单独的上下文中,这意味着它可以访问Node.js的API,但无法直接访问DOM。这种设计使得预......
  • [深入理解Java虚拟机]线程
    Java与协程在Java时代的早期,Java语言抽象出来隐藏了各种操作系统线程差异性的统一线程接口,这曾经是它区别于其他编程语言的一大优势。在此基础上,涌现过无数多线程的应用与框架,譬如在网页访问时,HTTP请求可以直接与ServletAPI中的一条处理线程绑定在一起,以“一对一服务”的方式处......
  • [深入理解Java虚拟机]HotSpot虚拟机对象
    对象的创建Java是一门面向对象的编程语言,Java程序运行过程中无时无刻都有对象被创建出来。在语言层面上,创建对象通常(例外:复制、反序列化)仅仅是一个new关键字而已,而在虚拟机中,对象(文中讨论的对象限于普通Java对象,不包括数组和Class对象等)的创建又是怎样一个过程呢?当Java虚拟机遇......