Casbin学习笔记

2023-05-16

基础知识

相关概念介绍

  1. casbin相关概念

    1. casbin是一个开源的访问控制框架,支持多种访问控制模型,例如ACL,RBAC,ABAC

    2. casbin将支持的模型抽象出一种perm访问控制模型

    3. casbin有两个核心概念,model和policy

    4. casbin只支持访问控制,不支持用户身份认证和管理用户和角色列表

  2. model概念

    1. model,即访问控制模型,需要在model中定义访问控制的模型,一般要对perm中的(策略、效果、请求、匹配)进行相关的定义,采用RBAC模型时,还需要定义角色

      1. 上图为RBAC模型的model定义,需要对perm定义,并且定义角色

  3. perm概念

    1. perm指的是policy(策略)、effect(效果)、request(请求)、match(匹配)

    2. 大致的过程就是,来了个请求,然后通过自定义的策略对该请求进行匹配操作,匹配结束后,将效果返回,在进行后续操作

    3. 策略

      1. 策略的格式在model中进行定义

    4. 请求

      1. 请求的格式在model中进行定义

    5. 匹配

      1. 把请求和策略中的每一条策略按照匹配的要求进行判定,然后赋值eft(allow或者deny)

      2. eft关键字,如果在model定义policy时定义了eft关键字,可以在策略文件中在添加个eft字段,默认是allow,也可以选择deny,当匹配中了的时候eft字段就会是allow(默认)或者deny(自定义)两种之一

    6. 效果

      1. 效果就是真正返回的结果,有true和false两种,true表示允许,false表示禁止

      2. 效果的写法只有4种,参考Model语法 · Casbin

简单演示

  1. ACL模型

    1. 对于该ACL示例中,model中定义了perm模型最简单的形式来实现ACL模型,对于第一个请求无法在策略中找到一条符合匹配规则的策略,所以返回的效果就是false,后两条请求均能找到,所以返回true

  2. rbac模型

    1. 对于该rabc示例中,在model文件中多了对角色的定义,策略文件中也多了一个关于用户和角色之间的对应关系。对于一个请求中的用户,首先会查寻策略,看他是什么角色,然后在以他拥有的角色和他原来的用户来查询策略,看是否匹配。

    2. 对于第一个请求,{alice, data2, read},首先会发现alice有个角色叫data2_admin,然后会在所有的策略中进行匹配{alice, data2, read}和{data2_admin, data2, read},其中之一匹配成功即可。第二个和第三个请求同理

  3. abac模型

    1. 基于属性的访问控制,可以可以使用主体、客体或动作的属性,而不是字符串本身来控制访问。casbin中用结构体来设置属性这个概念。对于示例中,匹配规则是,只有资源的主人这个属性是请求中的用户时才表示匹配上了,所以对于第一个请求来说是true,第二个是false

  4. 混合模型实现

  1. 对于该模型中,混合了rbac和abac两种模型,

    1. 对于第一条请求,首次会根据策略查询具有的角色,发现有data1_admin这个角色,然后在判断该请求的用户是否是该资源的拥有者,也就是对属性进行匹配,然后就是对操作和资源的匹配

    2. 第二条请求,在角色匹配时会失败

    3. 第三条请求,在属性匹配时会失败

model函数

  1. 在model中定义匹配规则时,可以使用函数,函数有内置函数和自定义函数

  2. 内置函数函数 · Casbin

  3. 自定义函数

    1. 按照文档提示格式定义函数

    2. 通过AddFunction 添加自定义函数。

    3. 添加后可以在model中的匹配操作进行使用

存储

  1. model存储

    1. model 只能加载,不能保存

    2. 有三种等效的方法来静态或动态地加载模型

      1. 从 .CONF 文件中加载 model,即将对模型的定义写在一个.CONF文件中

      2. 从代码加载 model,即将对模型的定义写在代码中,动态的加载

      3. 从字符串加载的 model,从多行字符串加载整个模型文本

  2. policy存储

    1. 在Casbin中,策略存储作为adapter(Casbin的中间件) 实现。 Casbin用户可以使用adapter从存储中加载策略规则 (aka LoadPolicy()) 或者将策略规则保存到其中 (aka SavePolicy())

    2. 一般将policy保存在数据库中

适配器

通过适配器Gorm Adapter和API,将policy保存到MySQL数据库中

  1. 先根据https://github.com/casbin/gorm-adapter拉取依赖

  2. 刚开始数据库中没有相应的策略表

  3. 运行代码会显示不通过,因为数据库中没有相应的策略

  4. 第一次运行,会自动创建一个叫casbin的数据库,并且创建一个casbin_rule的策略表

  5. 通过AddPolicy()向数据库中添加策略,并再次运行

  6. 显示添加成功,并且匹配成功

  7. 数据库中相应的策略表中也会有加入的策略

API

上面演示了添加的api,也有其他的增删改查的api,可以通过官方文档查看用法管理 API · Casbin

观察者

  1. 支持使用分布式消息系统

  2. 用户可以同时使用多个Casbin 执行器来处理大量的权限检查请求。

  3. 不在主库中

  4. 观察者 · Casbin

性能与优化

当应用于数以百万计的用户或权限的生产环境时,您可能会在Casbin 的强制执行中遇到性能降级

原因有两个:

  1. 高访问量,每秒到来的请求数量过于庞大。

    1. 有两种方案解决

      1. 多线程运行多个casbin实例,参考多线程

      2. 将casbin实例部署到机器集群,参考观察者

      3. 当然也可以两者一起进行,部署到多个机器且每个机器多线程运行多个casbin实例

  2. 策略规则过多

    1. 在云或多租户环境中,可能需要数百万条策略规则,导致加载策略规则速度很慢。

    2. 有几种解决策略

      1. 设计更加巧妙的Casbin模型或规则

      2. 通过共享让Casbin 的执行者只需要加载一套小套策略规则,例如:enforcer_0 只为tenant_0 到tenant_99提供服务, enforcer_1 只为tenant_100到tenant_199提供服务,参考策略子集加载

      3. 以授予RBAC角色权限,取代直接授予用户权限。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Casbin学习笔记 的相关文章

  • 综述文章怎么看

    综述文章怎么看 xff1f 综述好处就是总结了这个领域的典型文章 xff0c 自己不需要花费大量的时间去找文章 一 综述文章的目的 了解这个领域的整个发展脉络 二 如何读综述文章 知道目前最好的模型是什么 xff08 这个模型解决了什么问题
  • linus常用命令

    一 linux基础学习大纲 1 linux常用命令 命令参数使用 2 文件种类 文件权限设定 xff0c 权限掩码umask 3 linux系统下根目录 34 34 存放着什么文件 xff1f 4 环境变量使用 xff0c 重点学习 xff
  • 不能将类型“{ Change: (e: any) => void; }

    ts 子组件调用父组件发生报错 报错如图 原因 子组件传入的props参数类型不一致 span class token comment 原代码 span span class token keyword export span span c
  • Golang退出协程的几个错误方法

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 文章目录 对象方法协程的错误退出协程中的协程的错误退出多个协程的错误退出一个通道控制多个协程的正确退出方法 正确退出协程方法容易搜
  • QT学习笔记--信号与信号的连接,信号的断开

    信号与信号的连接 场景 xff1a 下课 xff0c 老师饿了 xff0c 学生请老师吃饭 若已经将老师和学生之间进行连接 xff0c 此时需要创建按钮 xff0c 点击后发出下课信号 此时 xff0c 可以将按钮与老师之间进行连接 eg
  • 搭建并配置Keil嵌入式开发环境,完成一个基于STM32汇编程序的编写

    文章目录 一 keil环境搭建二 stm32程序1 新建工程2 配置环境3 编译调试 三 分析HEX文件四 总结五 参考链接 一 keil环境搭建 百度网盘分享下载 mdk531安装 链接 xff1a https pan baidu com
  • VNC Viewer方式的远程连接树莓派

    文章目录 一 工具下载二 SD卡格式化三 烧录镜像四 配置网络五 putty远程连接六 VNC Viewer远程界面显示七 参考链接 一 工具下载 树莓派镜像 https www raspberrypi org downloads rasp
  • LaTeX001

    LaTeX排版入门须知 声明 一般而言 xff0c TeX和LaTeX有着区别 xff0c 但是考虑到热门程度 xff0c 于是使用LaTeX代指相关的所有排版系统 xff0c 只有在一些情况下会采取不同的称呼 所以这并不是严谨性不够的做法
  • LaTeX002

    LaTeX文件基本设定 文件目录组成 排版文件文件名为 34 xxx tex 34 xff0c 但是这个是一个没有提前设定格式的文件 xff1b 提前设定好的格式文件是 34 xxx cls 34 xff0c 由此可以自己预先编辑一个学校的
  • LaTeX003

    LaTeX特殊字符 之前说没有服务器 xff0c 所以一般来说静态网页我是使用github托管并运行 xff0c 效果还行 xff0c 不算太a慢 但是由于安全的问题有时候脚本没有运行 xff0c 这个时候需要允许执行不安全的内容 火狐需要
  • 双拼输入法-自然码和微软双拼

    双拼输入法 双拼输入法是在拼音输入法的基础上进行了二次编码 xff0c 将全拼拆解为两部分将这两部分进行合并分配至26键上 本文介绍自然码和微软双拼 本人力荐自然码 自然码双拼输入法 码表 键全拼码键全拼码键全拼码键全拼码Qq iuFf e
  • 蓝桥杯嵌入式——考试模板构建(1)

    1 创建资源文件夹和提交文件夹 2 使用STM32CubeMX创建 资源文件工程 xff08 1 xff09 创建工程 xff08 2 xff09 找到STM32G431RBT 3 配置RCC 主时钟为外部高速时钟 xff08 4 xff0
  • virtualbox 主机ping不通虚拟机解决办法

    场景描述 xff1a virtualbox虚拟机可以ping通主机和外网 xff0c 但是主机一直无法ping通虚拟机ip xff08 10 0 2 15 xff09 xff1b 虚拟机的网络设置为nat xff08 自己添加的nat网络
  • 注册Keil软件时出现“ TOOLS.INI: TOOLCHAIN NOT INSTALLED ”的解决办法

    当我们在注册keil软件时 xff0c 出现了 TOOLS INI TOOLCHAIN NOT INSTALLED 时 xff0c 首先看一下keil软件能不能正常使用 xff0c 如果keil软件能够正常使用证明安装是正确的 xff0c
  • go redis incr的使用

    声明 xff1a 本文CSDN作者原创投稿文章 xff0c 未经许可禁止任何形式的转载 xff0c 原文链接 文章目录 返回值代码示例 可用版本 xff1a gt 61 1 0 0 时间复杂度 xff1a O 1 为键 key 储存的数字值
  • MapReduce过程详解(非常全)

    MapReduce算法执行过程 核心思想 xff1a 分而治之 xff08 1 xff09 MapReduce框架使用InputFormat模块做Map前的预处理 xff0c 比如验证输入的格式是否符合输入定义 xff1b 然后 xff0c
  • HDFS读写流程(全面深入理解)

    1 HDFS写流程 xff08 1 xff09 客户端通过对FileSystem create 对象创建建文件 xff0c DistributedFileSystem会创建输出流FSDataOutputStream xff08 2 xff0
  • SHELL命令 -- 将命令的结果赋给变量

    如果想将文件夹中所有文件的名字赋给一个变量 xff0c 在shell命令中该如何实现呢 xff1f 1 使用反引号 var 61 96 ls 96 echo var 2 使用 var 61 ls echo var
  • 树莓派3B+无屏登录系统

    树莓派3B 43 无屏入门 本文章用于记录自己学习树莓派的心得和流程 xff0c 同时希望给他人一个参考 无屏入门 xff0c 并不是真正的无屏 xff0c 你需要笔记本电脑 我购买的是树莓派3b 43 无卡基础套餐 xff0c 5V2 5
  • Verilog | 4位数值比较器

    牛客上的一道题 xff0c 记录一下 这道题有两种思路 xff1a 第一种是按位比较 xff0c 列举出所有情况 xff1a module comparator 4 input 3 0 A input 3 0 B output wire Y

随机推荐

  • nvm切换node版本 npm版本未更新解决办法

    考虑受到全局npm影响 nvm uninstall 版本号 卸载版本号 nvm install 版本号 下载需要的版本号 删除c盘 用户配置文件下的 npmrc npmrc为全局配置文件 删除掉 恢复默认配置 nvm默认会切换npm npm
  • Ubuntu18.04——使用Remmina基于VNC协议远程连接Ubuntu客户端

    使用前需要确保被连接端已启动VNC iewer程序 安装Remmina sudo apt install remmina 使用Remmina基于VNC协议远程连接 启动remmina remmina 点击左上角的 43 修改协议为VNC 填
  • Ubuntu18.04——两台Ubuntu可以ping通但无法SSH

    问题描述 两台Ubuntu机器可以相互Ping通 xff0c 但是ssh失败 解决方法 SSH分客户端openssh client和openssh server 如果你只是想登陆别的机器的SSH只需要安装openssh client xff
  • 切换cuda版本的两种方式

    看正文之前 xff0c 最好先搞懂什么是环境变量 xff0c PATH环境变量的作用 xff0c 如何定义或修改环境变量 xff0c 软链接的概念 xff0c 什么是 bashrc文件 xff0c 如何创建软链接 xff0c 如何删除软链接
  • MySQL基础练习题

    1 xff09 查询出 goods 表中所有字段 2 xff09 查询出 goods 表中生产日期在一年前的商品 3 xff09 查询出 goods 表中商品名称中带 洗 字的商品 4 xff09 查询出 goods 表中商品编号为 2 4
  • 函数(new)

    函数 xff08 new 一 字符串处理函数 1 字符串的输入 xff08 1 xff09 scanf span class token macro property span class token directive keyword i
  • HTML,CSS中的复合写法总结

    CSS中的常用复合写法 表格常用属性字体属性的复合写法背景图片的复合写法边框的复合写法内边距 xff08 padding xff09 的复合写法外边距 xff08 margin xff09 的复合写法 一 表格常用属性 xff1a 属性含义
  • 无脑用CSS制作三角形及高级应用,看完别说你还不会!

    CSS的高级用法 有时我们在开发中会遇到如下的需求 xff1a 观察上面的图片 xff0c 我们看到第一张图片手机京东下面有一个凸出盒子的三角形 xff1b 第二张图片红色和白色有个斜线分割 xff0c 那么我们怎么实现这种效果呢 xff1
  • HTML中的空格、Tab、书名号大于号以及常用特殊符号

    HTML字符实体 在HTML页面中 xff0c 有一些特殊的符号我们想使用 xff0c 但是呢又不方便直接使用 xff0c 那么我们就可以用一些实体名称来代替 注 xff1a 实体名称对大小写敏感 特殊字符描述实体名称 空格 空格 amp
  • IDEA配置less文件自动编译(有图有真相)---我花了半个小时完成的配置,看完这篇你只需要十分钟。

    IDEA中配置less自动编译 先大概了解一下流程 xff0c 对配置有个整体的把握 安装node js安装lessIDEA中安装Node js插件IDEA中添加less组件IDEA中安装File Watchers插件配置File Watc
  • 书店销售管理系统----数据库原理及应用综合实验

    枯木逢春犹再发 xff0c 人无两度再少年 x1f342 系统主要模块如下 xff1a xff08 1 xff09 书店销售管理系统设计与实现 图书入库管理及查询统计 图书入库管理 xff1a 维护入库图书信息 xff08 如图书编号 书名
  • 【HQL - 查询用户的累计消费金额及VIP等级】

    水善利万物而不争 xff0c 处众人之所恶 xff0c 故几于道 x1f4a6 题目 xff1a 从订单信息表 order info 中统计每个用户截止其每个下单日期的累积消费金额 xff0c 以及每个用户在其每个下单日期的VIP等级 用户
  • HQL - 查询首次下单后第二天连续下单的用户比率

    水善利万物而不争 xff0c 处众人之所恶 xff0c 故几于道 x1f4a6 题目 xff1a 从订单信息表 order info 中查询首次下单后第二天仍然下单的用户占所有下单用户的比例 xff0c 结果保留一位小数 xff0c 使用百
  • HQL- 统计每个商品的销量最高的日期

    水善利万物而不争 xff0c 处众人之所恶 xff0c 故几于道 x1f4a6 题目 xff1a 从订单明细表 xff08 order detail xff09 中统计出每种商品销售件数最多的日期及当日销量 xff0c 如果有同一商品多日销
  • HQL - 查询销售件数高于品类平均数的商品

    水善利万物而不争 xff0c 处众人之所恶 xff0c 故几于道 x1f4a6 题目 xff1a 从订单明细表 xff08 order detail xff09 中查询累积销售件数高于其所属品类平均数的商品 span class token
  • HQL - 用户注册、登录、下单综合统计

    水善利万物而不争 xff0c 处众人之所恶 xff0c 故几于道 x1f4a6 题目 xff1a 从用户登录明细表 xff08 user login detail xff09 和订单信息表 xff08 order info xff09 中查
  • 博客帮助文档

    目录 博客积分规则 博客等级 C币规则 xff08 试运营 xff09 博客VIP文章说明 博客专家 如何成为博客专家 xff1f 企业博客 如何开通企业博客 博客勋章 分类专栏 博客搬家 CSDN博客用户准则 总则 xff1a 博客注册
  • CentOS7关闭防火墙

    CentOS7关闭防火墙 1 命令行界面输入命令 34 systemctl status firewalld service 34 并按下回车键 systemctl status firewalld service 2 然后在下方可度以查看
  • CSS高度塌陷问题及解决方法

    触发条件 包含结构 所有的子元素浮动 且父元素没有设置高度 就会触发父元素高度塌陷 例如 xff1a 解决方法一 xff1a 给父元素添加固定高度 缺点 不适合高度自适应的布局 代码 xff1a lt style gt margin 0 p
  • Casbin学习笔记

    基础知识 相关概念介绍 casbin相关概念 casbin是一个开源的访问控制框架 xff0c 支持多种访问控制模型 xff0c 例如ACL xff0c RBAC xff0c ABAC casbin将支持的模型抽象出一种perm访问控制模型