其他分享
首页 > 其他分享> > casbin 学习笔记【1】

casbin 学习笔记【1】

作者:互联网

1. casbin 是什么

开源的访问控制库,支持多种访问控制模型

2. casbin hello world

2.1. 创建一个casbin执行器实例:

e, err := casbin.NewEnforcer(model, adapter) 需要两个参数,第一个是访问控制模型,第二个是适配器(supported-adapters

a, err := xormadapter.NewAdapter("mysql", "mysql_username:mysql_password@tcp(127.0.0.1:3306)/casbin")

m, err := model.NewModelFromString(`
[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
`)

e, err := casbin.NewEnforcer(m, a)

也可以用gorm来适配数据库:adapter, err := gormadapter.NewAdapterByDB(db)

2.2. 检查权限

sub := "alice" // the user that wants to access a resource.
obj := "data1" // the resource that is going to be accessed.
act := "read" // the operation that the user performs on the resource.

ok, err := e.Enforce(sub, obj, act)

if err != nil {
    // handle err
}

if ok == true {
    // permit alice to read data1
} else {
    // deny the request, show an error
}

3. 模型文件的格式

model.conf 文件包含以下4个部分:Policy, Effect, Request, Matchers

3.1 request

定义请求参数及其顺序, 最少需要主谓宾三个, 比如刚刚的r = sub, obj, act

3.2 policy

[policy_definition]
p = sub, obj, act
p2 = sub, act

而实际策略(policy.csv)为:

p, alice, data1, read
p2, bob, write-all-objects

通过p和p2,策略定义为实际策略中的多条记录提供了匹配机制:

(alice, data1, read) -> (p.sub, p.obj, p.act)
(bob, write-all-objects) -> (p2.sub, p2.act)
[policy_effect]
e = some(where (p.eft == allow))

其中,p.eft 是策略最终生效的结果,即同意allow或不同意deny,以上定义的意思是,只要有任一条策略同意,则最终生效结果为同意。
e = some (where (p.eft == allow)) && !some(where (p.eft == deny) 有符合允许结果的策略,并且,无符合拒绝结果的策略,则结果为真
实际上目前casbin只提供了预定义的5个policy effect:policy-effect

3.3 Matcher

定义了request 和 policy的匹配规则。

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

最简单的匹配,表示request 和policy中的主谓宾应该一致

3.4 例子

ACL model:

[request_definition]
r = sub, obj, act

[policy_definition]
p = sub, obj, act

[policy_effect]
e = some(where (p.eft == allow))

[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act

policy.csv:

p, alice, data1, read
p, bob, data2, write

意思是,alice可以读data1,bob可以写data2

3.5 RBAC 和ABAC的区别

标签:obj,sub,err,casbin,笔记,学习,act,policy
来源: https://www.cnblogs.com/mrlonely2018/p/16264114.html