Casbin 使用记录
Casbin 是什么?
官方解释:Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。
Casbin只负责访问控制。身份认证 authentication(即验证用户的用户名、密码),需要其他专门的身份认证组件负责。例如(jwt-go)
两个核心概念:
访问控制模型model和策略policy。
工作原理:
Casbin把 访问控制模型 被抽象为基于
PERM元模型 (Policy, Effect, Request, Matchers) [策略,效果,请求,匹配器]
PERM(Policy, Effect, Request, Matchers)模型很简单, 但是反映了权限的本质 – 访问控制
- Policy: 定义权限的规则
- Effect: 定义组合了多个 Policy 之后的结果, allow/deny
- Request: 访问请求, 也就是谁想操作什么
- Matcher: 判断 Request 是否满足 Policy
匹配来源:定义的 request 和 存储的 police 比对判断。
所有 model file 中主要就是定义 PERM 4 个部分。
的一个文件( model.conf , 这个文件一般是固定的)。 因此,切换或升级项目的授权机制与修改配置一样简单。 您可以通过组合可用的模型来定制您自己的访问控制模型(ACL, RBAC, ABAC)。 例如,您可以在一个model中获得RBAC角色和ABAC属性,并共享一组policy规则。
Casbin中最基本、最简单的model是ACL。ACL中的model CONF为:
# Request definition
[request_definition] 自定义请求的格式
r = sub, obj, act # Policy definition
[policy_definition] 策略定义
p = sub, obj, act # Policy effect
[policy_effect]
e = some(where (p.eft == allow)) # Matchers
[matchers]
m = r.sub == p.sub && r.obj == p.obj && r.act == p.act
g, g2, g3 表示不同的 RBAC 体系, _, _ 表示用户和角色 _, _, _ 表示用户, 角色, 域(也就是租户)
ACL model的示例policy如下:
p, alice, data1, read
p, bob, data2, write
Model 语法:
Model CONF 至少应包含四个部分:
[request_definition], [policy_definition], [policy_effect], [matchers]。如果 model 使用 RBAC, 还需要添加
[role_definition]部分
policy 不同,model 只能加载,不能保存。 因为我们认为 model 不是动态组件,不应该在运行时进行修改,所以我们没有实现一个 API 来将 model 保存到存储中.
policy file
定义具体的策略, 权限的检查就是基于定义的 model file 和 policy file 来完成的.
相对于 model file 定义规则, policy file 中定义的就是具体的内容.
如何使用?
创建一个Casbin决策器需要有一个模型文件和策略文件为参数:
import "github.com/casbin/casbin"
e := casbin.NewEnforcer("path/to/model.conf", "path/to/policy.csv")
在访问发生之前, 在代码中添加强制挂钩:(这一步就是校验访问控制权,然后根据返回值做对象的分之操作)
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. if e.Enforce(sub, obj, act) == true {
// permit alice to read data1
} else {
// deny the request, show an error
}
casbin 存储到数据库的记录是策略, 访问控制模型当系统确定户基本很少改动。可以存储到项目配置文件(本地)
casbin 存储RBAC方案中用户和角色之间的映射关系。(而这个关系是基于 midel 访问控制模型)
权限管理系统最好全局依赖 一个Casbin 决策器(这个决策器 依赖 模型文件和策略文件为参数)
在访问发生之前,在代码中加入强制钩子,控制。
这个请求格式是可以自定义的, 默认为默认的请求格式为 { subject, object , action }
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. if e.Enforce(sub, obj, act) == true {
// permit alice to read data1
} else {
// deny the request, show an error
}
Casbin 模型可以是多个组合。也可以共享同一组policy规则。
数据库里存储的 策略 第一个字段代表的是在 model 里定义的模型类型。
p, alice, data1, read 其中的 p 是在 model.conf 文件中定义好的。
多租户示例
定义 model file
[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
Cabin 没有验证用户是否是有效的用户,或者角色是一个有效的角色。 这应该通过认证来解决。
参考资料:https://www.cnblogs.com/xiaohunshi/p/10372881.html
https://www.cnblogs.com/wang_yb/archive/2018/11/20/9987397.html
Casbin 使用记录的更多相关文章
- Casbin权限模型
权限框架casbin1.概述Casbin是一个强大的.高效的开源访问控制框架,其权限管理机制支持多种访问控制模型. Casbin支持以下编程语言: Casbin可以做到:支持自定义请求的格式,默认的请 ...
- Golang最强大的访问控制框架casbin全解析
Golang最强大的访问控制框架casbin全解析 Casbin是一个强大的.高效的开源访问控制框架,其权限管理机制支持多种访问控制模型.目前这个框架的生态已经发展的越来越好了.提供了各种语言的类库, ...
- Go之Casbin简介,安装,模型,存储,函数
简介 Casbin是一个强大的,高效的开源访问控制框架,其权限管理机制支持多种访问控制模型 支持编程语言 不同语言中支持的特性 我们一直致力于让 Casbin 在不同的编程语言中拥有相同的特性. 但是 ...
- 记一次debug记录:Uncaught SyntaxError: Unexpected token ILLEGAL
在使用FIS3搭建项目的时候,遇到了一些问题,这里记录下. 这里是发布搭建代码: // 代码发布时 fis.media('qa') .match('*.{js,css,png}', { useHash ...
- nginx配置反向代理或跳转出现400问题处理记录
午休完上班后,同事说测试站点访问接口出现400 Bad Request Request Header Or Cookie Too Large提示,心想还好是测试服务器出现问题,影响不大,不过也赶紧上 ...
- Kali对wifi的破解记录
好记性不如烂笔头,记录一下. 我是在淘宝买的拓实N87,Kali可以识别,还行. 操作系统:Kali 开始吧. 查看一下网卡的接口.命令如下 airmon-ng 可以看出接口名称是wlan0mon. ...
- 2015 西雅图微软总部MVP峰会记录
2015 西雅图微软总部MVP峰会记录 今年决定参加微软MVP全球峰会,在出发之前本人就已经写这篇博客,希望将本次会议原汁原味奉献给大家 因为这次是本人第一次写会议记录,写得不好的地方希望各位园友见谅 ...
- 分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间)
分享一个SQLSERVER脚本(计算数据库中各个表的数据量和每行记录所占用空间) 很多时候我们都需要计算数据库中各个表的数据量和每行记录所占用空间 这里共享一个脚本 CREATE TABLE #tab ...
- 我是如何在SQLServer中处理每天四亿三千万记录的
首先声明,我只是个程序员,不是专业的DBA,以下这篇文章是从一个问题的解决过程去写的,而不是一开始就给大家一个正确的结果,如果文中有不对的地方,请各位数据库大牛给予指正,以便我能够更好的处理此次业务. ...
随机推荐
- MySQL 视图 触发器 事务 存储过程 函数 流程控制 索引与慢查询优化
视图 1.什么是视图? 视图就是通过查询得到的一张虚拟表,然后保存下来,下次可直接使用 2.为什么要使用视图? 如果要频繁使用一张虚拟表,可以不用重复查询 3.如何使用视图? create view ...
- Kylin介绍 (很有用)
转:http://blog.csdn.net/yu616568/article/details/48103415 Kylin是ebay开发的一套OLAP系统,与Mondrian不同的是,它是一个MOL ...
- IDEA重启说明
1.点击File–>Invalidate Caches/Restart,进入重启窗口 2.选择自己所需要的重启方式,四个按钮,一共三种重启方式 按钮说明: Invalidate and Rest ...
- 011——C#创建ecxel文件(附教程)
(一)参考文献:[C#]创建表格(.xlsx)的典型方法 (二)视频教程:https://v.qq.com/x/page/t30068qfex5.html (三)下载地址:https://downlo ...
- Oracle语句中IN和=的区别有哪些?
Oracle语句中IN和=的区别有: 1.首先应用范围不一样:in 可以理解为是范围内的选择:= 只有一个.例如: select sno, sname from t1 where sno in ('s ...
- 通过 Ajax 调取后台接口将返回的 json 数据绑定在页面上
第一步: 编写基础的 html 框架内容,并引入 jquery: <!doctype html> <html lang="en"> <head> ...
- hdu 6183
给出二维平面$opt1.$ 对点 $(x, y)$ 增减颜色 $c$,$opt2.$ 询问矩形 $(1, y_1), (x, y_2)$ 内出现过的颜色种数$x, y <= 1e6, c < ...
- CSP考前总结
10.2 考试: 1.数位DP 或者找规律 2.SB题,扫一遍找最大最小即可 3.莫比乌斯反演 出题人相出个数论和数据结构的综合题,但是找不到NOIP级别的,没办法只能忍痛割爱出个莫比乌斯,话说回来, ...
- (转)代码审计利器-RIPS实践
一.代码审计工具介绍 代码审计工具可以辅助我们进行白盒测试,大大提高漏洞分析和代码挖掘的效率. 在源代码的静态安全审计中,使用自动化工具辅助人工漏洞挖掘,一款好的代码审计软件,可以显著提高审计工作的效 ...
- 在SpringMVC中操作Session、Request、Response对象
示例 @Service public class UserServiceImpl implements UserService { @Autowired private UserMapper user ...