ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

casbin 学习笔记【1】

2022-05-12 20:33:53  阅读:235  来源: 互联网

标签:obj sub err casbin 笔记 学习 act policy


1. casbin 是什么

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

  • 支持自定义访问控制语法
  • 管理访问控制模型及策略的存储
  • 支持RBAC 的角色关系映射
  • 内置超级用户
  • 内置多种规则匹配算子
  • 访问控制不是账户验证,casbin不提供密码验证功能
  • casbin也不会存储任何用户信息(如角色、密码等)

2. casbin hello world

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

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

  • 默认模式,传入模型文件和文件适配器(用户权限配置):e, err := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
  • 传入符合格式的模型字符串和数据库适配器:
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. 检查权限

  • ok, err := e.Enforce(sub, obj, act), 把这里类比成语言中的主谓宾就很好理解了
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
}
  • 批量检查
    results, err := e.BatchEnforce([][]interface{}{{"alice", "data1", "read"}, {"bob", "data2", "write"}, {"jack", "data3", "read"}})
    返回一个布尔切片,其中 results[0] 为{"alice", "data1", "read"} 的权限检查结果,以此类推。
  • casbin 也提供运行时的权限管理接口
    roles, err := e.GetRolesForUser("alice")
    Management API

3. 模型文件的格式

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

3.1 request

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

3.2 policy

  • policy definition
    提供了访问策略的定义,比如有如下策略定义:
[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
    策略生效规则,定义了当一个请求符合多个策略时,应该如何提供访问权限,是对Matchers的匹配结果再次进行逻辑组合判断的模型。 比如:
[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的区别

  • 基于角色的访问控制 (Role-based access control)
  • 基于属性的访问控制(Attribute-based access control - ABAC)使用 ABAC 鉴权

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

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有