Casbin多租户模型的访问控制
复习之前学习了给主体和资源赋予角色的RBAC 模型!描述了角色对某一类数据的操作权限
类比一个学校的教务系统!
之前我们从
给一个 张老师定义权限 可以把某个学生送进某个班,送出某个班(指定某个用户的权限)
到给张老师这个人定义一个老师的角色,然后给老师这个角色定义权限 老师可以让把某个学生送进某个班,送出某个班 (给用户定义角色,然后给角色权限)
然后除了给老师定义角色权限,后面还给学生定义角色权限,老师角色操作学生角色的权限(给用户定义角色权限,给资源定义角色权限!)
下一步就是到我们这里要学的多租户模型,类比成学校教务系统的话,这个租户其实就是指不同的学校了!
一般情况下,某个老师只在他自己的学校有某些权限!而去到其他的学校可能权限就没有了!
模型定义
Request
的四个分别是: 主体,租户域,资源,动作
Policy
同 Request 一样!
[request_definition]
r = sub, dom, obj, act
[policy_definition]
p = sub, dom, obj, act
[role_definition]
g = _, _, _
[policy_effect]
e = some(where (p.eft == allow))
[matchers]
m = g(r.sub, p.sub, r.dom) && r.dom == p.dom && r.obj == p.obj && r.act == p.act
定义 policy 按照 g(r.sub, p.sub, r.dom)顺序去匹配 匹配上的 就进入r.dom == p.dom && r.obj == p.obj && r.act == p.act
去看是不是满足这个规则
p, 老师, 第三中学, 马小跳, delete
p, 老师, 第一中学, 李小虎, delete
p, 老师, 第一中学, 王小兵, delete
g, 张老师, 老师, 第三中学
g, 李老师, 老师, 第二中学
g, 王老师, 老师, 第一中学
Request : 张老师,第三中学,马小跳,delete
首先丢到 g(r.sub, p.sub, r.dom)
去找policy有没有对应的!g
通过 g(r.sub, p.sub, r.dom)
找到了 张老师, 老师, 第三中学
那就知道。张老师是第三中学的老师!
上面的 p 呢 有定义 第三中学的老师是可以对马小跳进行 delete 的动作的 那么这个请求的权限校验就通过的!
有因为后面的规则都是 判断是否 ==
那么根据规则判断就完了
找到了 g, 张老师, 老师, 第三中学
这一条,第三中学(租户域)的老师(角色)角色,然后再去看 p, 老师, 第三中学, 马小跳, delete
刚好和请求能对上!
角色,租户,操作的资源对象和动作都可以对应上,那么就说明权限校验通过!
评论区