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

一、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}

下面我们图解用法:
casbin的详细理解过程(附图片理解)(rbac模型)_第1张图片

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

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

(图一)

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

(图二)


二、role_definition 角色域

1)g = _ , _ 表示以角色为基础

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

带角色域匹配,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

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

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

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

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

四、练习测试

1、在ACL模型中,下列案例可以通过吗

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

答案:false,根本找不到


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

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

答案:true

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

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

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

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


3、多商户模型

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

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

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

你可能感兴趣的:(后端,java,golang)