Casbin创建RBAC模型

Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型,支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。

RBAC 的三个主要规则:

  • 角色分配:只有当主体选择或被分配角色时,主体才能行使权限。
  • 角色授权:主体的主动角色必须经过主体的授权。通过上面的规则 1,此规则可确保用户只能承担其被授权的角色。
  • 权限授权:只有对主体的主动角色进行了授权,主体才能行使该权限。通过规则 1 和 2,此规则可确保用户只能行使他们被授权的权限。

还可以应用附加约束,并且可以将角色组合在层次结构中,其中较高级别的角色包含子角色拥有的权限。

借助角色层次结构和约束的概念,我们可以控制RBAC来创建或模拟基于网格的访问控制(LBAC)。因此RBAC可以被认为是LBAC的超集。

定义 RBAC 模型时的约定

S = 主体 = 人或自动代理
R = 角色 = 定义权限级别的工作职能或头衔
P = 权限 = 对资源访问模式的批准
SE = 会话 = 涉及 S、R 和/或 P 的映射
SA = 科目分配
PA = 权限分配
RH = 部分排序的角色层次结构。 RH 也可以写成: ≥ (记法:x ≥ y 表示x 继承了y 的权限。)
一个主题可以有多个角色。
一个角色可以有多个主题。
一个角色可以有多个权限。
一个权限可以分配给多个角色。
一个操作可以分配多个权限。
一个权限可以分配给许多操作。

约束对来自相反角色的权限的潜在继承设置了限制性规则。因此它可以用来实现适当的职责分离。例如,不应允许同一个人同时创建登录帐户和授权帐户创建。

如何创建RBAC模型?

Casbin配置文件(Model 文件)

[request_definition]
r = sub, obj, act[policy_definition]
p = sub, obj, act[role_definition]
g = _, _[policy_effect]
e = some(where (p.eft == allow))[matchers]
m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act

创建支持多租户的RBAC模型:

[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

初始化casbin

package casbinimport ("errors""github.com/casbin/casbin/v2""github.com/casbin/casbin/v2/model""github.com/casbin/gorm-adapter/v3""go.uber.org/zap""yt.yin/core/global"
)// InitCasbin
/***  @Description: 初始化Casbin执行者(与gorm结合)*  @param DB Gorm连接池*  @param casbinConfPath casbin配置文件地址*  @return Enforcer casbin执行者*  @return err 错误*/
func InitCasbin(casbinConfPath ...string) (err error) {// Gorm适配器adapter, err := gormadapter.NewAdapterByDB(global.DB)if err != nil {global.LOG.Error("创建Casbin Gorm适配器错误:", zap.Any("err", err))return  errors.New("Casbin Gorm适配器错误:" + err.Error())}global.LOG.Info("创建Casbin Gorm适配器成功")if len(casbinConfPath) > 0 {// 通过ORM新建一个执行者global.Enforcer, err = casbin.NewEnforcer(casbinConfPath[0], adapter)if err != nil {global.LOG.Error("新建Casbin执行者异常:", zap.Any("err", err))return  errors.New("新建Casbin执行者异常:" + err.Error())}} else {m, _ := model.NewModelFromString(`[request_definition]r = sub, obj, act[policy_definition]p = sub, obj, act[role_definition]g = _, _[policy_effect]e = some(where (p.eft == allow))[matchers]m = g(r.sub, p.sub) && r.obj == p.obj && r.act == p.act`)global.Enforcer, err = casbin.NewEnforcer(m, adapter)if err != nil {global.LOG.Error("新建Casbin执行者异常:", zap.Any("err", err))return  errors.New("新建Casbin执行者异常:" + err.Error())}}// 导入访问策略err = global.Enforcer.LoadPolicy()if err != nil {global.LOG.Error("导入访问策略异常:", zap.Any("err", err))return  errors.New("导入访问策略异常:" + err.Error())}return  nil
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/57788.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

有色行业测温取样机器人 - SNK施努卡

SNK施努卡有色行业熔炼车间机器人测温取样 在有色行业,测温取样机器人专门设计用于自动化处理高温熔体的温度监测和样品采集任务。这类机器人在铜、铝、锌等金属冶炼过程中扮演着关键角色,以提高生产效率、确保产品质量并增强工作安全性。 主要工作项 …

基于 matlab 计算 TPI(地形位置指数)

1. TPI 简介 地形位置指数算法由 Weiss 提出,主要是根据局部地形高程对各类地貌单元提取。 其基本原理为:在邻域分析方法的基础上,计算每个栅格的高程值和该栅格领域内所有栅格的平均高程之间的差值,正值表示该栅格点高于领域内栅…

element ui中el-image组件查看图片的坑

比如说上传组件使用el-image-viewer组件去看&#xff0c;如果用错了&#xff0c;你会发现&#xff0c;你每次只能看一张图片 <template><div><el-upload action"#" list-type"picture-card" :auto-upload"false" :file-list"…

Spring Cloud --- Sentinel 熔断规则

熔断规则 慢调用比例 发送10个请求&#xff0c;每个请求理想响应时长为200毫秒。统计1秒钟&#xff0c;如果10个请求响应时间超过200毫秒的比例大于等于10%&#xff0c;则触发熔断&#xff0c;熔断5秒。 异常比例 1秒内&#xff0c;发送请求出现异常率为20%&#xff0c;则触…

arcgis中dem转模型导入3dmax

文末分享素材 效果 1、准备数据 (1)DEM (2)DOM 2、打开arcscene软件 3、加载DEM、DOM数据 4、设置DOM的高度为DEM

LabVIEW中句柄与引用

在LabVIEW中&#xff0c;句柄&#xff08;Handle&#xff09; 是一种用于引用特定资源或对象的标识符。它类似于指针&#xff0c;允许程序在内存中管理和操作复杂的资源&#xff0c;而不需要直接访问资源本身。句柄用于管理动态分配的资源&#xff0c;如队列、文件、网络连接、…

Vision-Language Models for Vision Tasks: A Survey阅读笔记

虽然LLM的文章还没都看完&#xff0c;但是终究是开始看起来了VLM&#xff0c;首当其冲&#xff0c;当然是做一片文献综述啦。这篇文章比较早了&#xff0c;2024年2月份出的last version。 文章链接&#xff1a;https://arxiv.org/abs/2304.00685 GitHub链接&#xff1a;GitHu…

vue数据驱动视图是如何实现的

Vue的数据驱动视图简单理解&#xff1a; 当Vue实例中的数据&#xff08;data&#xff09;发生变化时&#xff0c;与之相关联的视图&#xff08;template&#xff09;会自动更新&#xff0c;反映出最新的数据状态。 这种数据与视图的自动同步&#xff0c;就是Vue数据驱动视图的核…

Java Web开发教程:从入门到精通

Java Web开发教程&#xff1a;从入门到精通 前言 在当今互联网时代&#xff0c;Web开发已成为一个炙手可热的领域。Java作为一种成熟的编程语言&#xff0c;以其稳定性和跨平台性&#xff0c;成为了Web开发的热门选择。本文将带您从基础知识入手&#xff0c;逐步深入Java Web…

C#与C++交互开发系列(十):数组传递的几种形式

前言 在C#和C的交互开发中&#xff0c;数组传递是一个非常常见且实用的场景。数组可以作为方法的参数&#xff0c;也可以作为响应结果返回。在本篇博客中&#xff0c;我们将探讨几种常见的数组传递方式&#xff0c;展示如何在C#与C之间进行有效的数据交换。我们将主要介绍以下…

代谢组数据分析(二十):通过WGCNA识别核心代谢物

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍识别核心基因加载R包导入数据数据预处理检查数据完整性计算软阈值soft根据软阈值构建接矩阵和拓扑重叠矩阵聚类并构建网络拓扑重叠热图查看具体模块的代谢物表达热图识别表型相关模…

word表格跨页后自动生成的顶部横线【去除方法】

Hello World! Its been a long time. 这一年重心放在了科研、做事、追寻新的经历上&#xff0c;事有正事、琐事、幸事、哀事&#xff0c;内心与认知成长了一些&#xff0c;思想成熟了几分&#xff0c;技艺也有若干收获。不管怎样&#xff0c;来打个卡吧&#xff0c;纪念一下&…

边缘计算路由网关R40钡铼技术3LAN口1WAN口Modbus协议

在当今快速发展的工业互联网时代&#xff0c;随着物联网&#xff08;IoT&#xff09;与大数据分析的日益融合&#xff0c;边缘计算成为了提高数据处理效率、降低延迟的关键技术。 产品特点&#xff1a; 多接口支持&#xff1a;R40B拥有3个LAN口和1个WAN口的设计&#xff0c;能…

CSS背景之多背景

设置背景图片大小 background-size: 500px 500px; 取值&#xff1a;&#xff08;1&#xff09;第一个值为宽&#xff0c;第二个值为高。 只有一个值的话就是正方的。 <!DOCTYPE html> <html> <head><style type"text/css">.box{width: 800…

在PHP中,读取大文件

在PHP中&#xff0c;读取大文件可以采用以下几种方法&#xff1a; 1. 使用fopen和fread函数&#xff1a;这是最基本的文件读取方法&#xff0c;可以逐行读取大文件。首先使用fopen函数打开文件&#xff0c;然后使用fread函数指定读取的字节数&#xff0c;逐行读取文件内容并进…

Go 版本升级 | 统计 Github 社区 Go 版本分布情况

背景 因为最近三年用的 Go 版本是 1.16&#xff0c;但最新的版本升级到了 1.23&#xff0c;很多依赖的三方包最新文件都已经升级&#xff0c;使用了泛型以及 GO 新版本的特性&#xff0c;导致我只能适配 Go1.16 的三方包旧版本&#xff0c;但这种问题发生的频率多了后&#xf…

分享几个办公类常用的AI工具

办公类 WPS AI讯飞智文iSlideProcessOn亿图脑图ChatPPT WPS AI 金山办公推出的协同办公 AI 应用&#xff0c;具有文本生成、多轮对话、润色改写等多种功能&#xff0c;可以辅助用户进行文档编辑、表格处理、演示文稿制作等办公操作。 https://ai.wps.cn/ 讯飞智文 科大讯飞推…

从零开始:AI制作PPT工具大比拼

现在真的万物皆可AI了&#xff0c;甚至是令人头疼的PPT&#xff0c;也可以直接用AI来搞定了。作为一个PPT新手&#xff0c;我最近对AI制作PPT这个话题产生了浓厚的兴趣。我决定亲自试一试市面上几款热门的AI制作PPT工具&#xff1a;笔灵AIPPT、轻竹PPT、博思白板AIPPT和KimiAI。…

了解Oracle表结构查询:获取列信息与注释

目录 1. 基本知识2. Demo3. 补充Mysql 1. 基本知识 Oracle数据库中&#xff0c;表结构信息包含列名、数据类型、长度、可空性、默认值以及字段注释等&#xff0c;这些信息对于理解数据库设计和维护非常重要 基本的属性要点如下&#xff1a; 表名&#xff08;TABLE_NAME&…

uniApp 加载google地图 并规划路线

uniApp 加载google地图 并规划路线 备注:核心代码实例 备注: 打开谷歌地图失败的话 参考google开发文档 https://developers.google.com/maps/documentation/urls/ios-urlscheme?hlzh-cn#swift核心代码 mounted() {this.loadGoogleMapsScript(); }, methods: {//加载loadGo…