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

摘自: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有不同权限来判断

posted @ 2024-07-15 17:25  LiuYanYGZ  阅读(122)  评论(0编辑  收藏  举报