Casbin使用随笔

1 要满足的策略

[request_definition]

    r = sub, obj, act

# 请求的规则

# r 是规则的名称,sub 为请求的实体,obj 为资源的名称, act 为请求的实际操作动作

[policy_definition]

    p = sub, obj, act

# 策略的规则

# 同请求

[role_definition]

    g = _, _

# 角色的定义

# g 角色的名称,第一个位置为用户,第二个位置为角色,第三个位置为域(在多租户场景下使用)

[policy_effect]

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

# 任意一条 policy rule 满足, 则最终结果为 allow

[matchers]

    m = g(r.sub, p.sub) == true \

            && keyMatch2(r.obj, p.obj) == true \

            && regexMatch(r.act, p.act) == true \

            || r.sub == "root"

# 前三个用来匹配上面定义的请求的规则, 最后一个或条件为:如果实体是root 直接通过, 不验证权限

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

r: 表示请求的规则。sub请求实体,obj资源路径,act请求的方法。

p: 表示协议的协议的规则,一般会放在数据库表中,r请求会和p进行比较,来判断是否有权限进行访问。

g:表示角色定义,也就是说简单点就是将用户A定义为角色B。(一共两个参数)

m:表示匹配的规则。这里就是进行整个匹配的核心,直接得出结论是否有权限进行相关的API权限。

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

得到结论:通过request r 和策略 p 通过匹配规则m 得到e e是bool型

2 角色对应策略规则

      1)列出资源及资源的操作动作   需要后台界面去勾选

如:Q_01_0,user,add   

        Q_01_1,user,list    

        Q_01_2,user,edit    

         Q_01_3,user,delete

        2)角色去关联资源操作标识Q

         super,Q_01_0

         super,Q_01_2

         super,Q_01_3

         Anchor,Q_01_1

        3)数据库存用户对应发的角色 角色几位

        小角色 不能操作大角色

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容