casbin快速上手

本文介绍了CASBIN的PERM原模型,包括基本参数如subject、object、action和eft,以及Policy、Effect和Matchers的概念。PERM模型的策略存储在数据库中,通过匹配规则决定请求是否放行。文章还提供了匹配规则的示例和角色定义。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. PERM原模型

定义一个策略,定义一个匹配规则,通过请求参数与策略通过规则进行匹配,获得一个eft影响,拿到影响的结果,进到影响的表达式,返回一个布尔值。

1.1 基本参数

  • subject(sub访问实体)
  • object(obj访问的资源)
  • action(act访问方法)
  • eft(策略结果,一般为空,默认指定allow,还可以定义为deny,是硬编码写死,只能是这两个值)

1.2 模型介绍

  • Policy 策略 p={sub,obj,act,eft}

    • 策略一般存放在数据库,因为会有很多
  • Effect 影响

    • 他决定我们是否可以放行
    • e = some(where(p.eft == allow)) 这种情况下,我们的一个matchers匹配完成得到了allow那么这条请求将被放行
    • e = some(where(p.eft == allow)) && !some(where(p.eft == deny))
    • 这里的规则是定死的
      • some(where (p.eft == allow)) 能返回来一条allow的
      • !some(where (p.eft == deny)) 没有一条是deny的
      • some(where (p.eft == allow)) && !some(where (p.eft == deny)) 能返回allow并且没有阻止的
      • priority(p.eft) || deny
  • Request 请求 r={sub,obj,act}

  • Matchers 匹配规则 Request和Policy的匹配规则

    • m = r.sub == p.sub && r.act == p.act && r.obj == p.obj
    • r 请求 p策略
    • 这时候会把r和p按照上述描述进行匹配,从而返回匹配的结果(eft)如果不定义,会返回allow,如果定义过了,返回我们定义过的结果
    • 只有满足了匹配规则,才会返回eft
  • role_defintion 角色域

    • g = _, _ 表示以角色为基础 g = user,role 表示用户是哪个角色
    • g = _, _, _ 表示以域为基础(多商户模式)g = user,role, _ 表示这个角色是哪个角色属于哪个域(哪个商户)

1.3 样例

请求入参(实体,资源,方法)
[request_definition]   
r = sub, obj, act  

策略(实体,资源,方法)
[policy_definition]
p = sub, obj, act

/*
角色(用户,角色)
[role_definition]  
g=_, _  
*/

经过策略通过规则匹配规则后的策略结果是否等于里面那个allow 
[policy_effect]
e = some(where (p.eft == allow))

进来的实体资源方法能不能在权限表里面找到一个一模一样的
[matchers]
m = r.sub, p.sub && r.obj == p.obj && r.act == p.act
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值