gin框架下casbin权限系统ACL授权验证模型入门示例讲解

gin框架学习-Casbin入门指南(ACL、RBAC、域内RBAC模型) 阅读详情

1.概述

Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。

2.安装

go get github.com/casbin/casbin

3.项目目录

工作原理介绍:

导入cosbin包后,主要的文件有模型文件casbin_rbac_model.conf ,权限策略文件Policy.csv(存放权限策略,也可以用mysql代替),在需要判断用户有没有权限能访问的地方,使用Enforce()这个函数就会返回用户能否访问,就这么简单。

4、模型文件(Model.conf),具体语法可以参考官方教程 Model语法

# 请求
[request_definition]
r = sub,obj,act
# sub ——> 想要访问资源的用户角色(Subject)——请求实体
# obj ——> 访问的资源(Object)
# act ——> 访问的方法(Action: get、post...)

# 策略(.csv文件p的格式,定义的每一行为policy rule;p,p2为policy rule的名字。)
[policy_definition]
p = sub,obj,act
# p2 = sub,act 表示sub对所有资源都能执行act

# 组定义
[role_definition]
g = _, _
# _,_表示用户,角色/用户组
# g2 = _,_,_ 表示用户, 角色/用户组, 域(也就是租户)

# 策略效果
[policy_effect]
e = some(where (p.eft == allow))
# 上面表示有任意一条 policy rule 满足, 则最终结果为 allow;p.eft它可以是allow或deny,它是可选的,默认是allow

# 匹配器
[matchers]
m = r.sub == p.sub && keyMatch(r.obj,p.obj) && (r.act==p.act || p.act == "*") || r.sub=="superTest" || r.sub=="admin"
#m = r.sub == p.sub && ParamsMatch(r.obj,p.obj) && r.act == p.act
# r.sub="xxx"表示实体为superTest的直接通过

参数详解:

这是一个模型文件,里面定义的都是自定义的参数,只要统一命名就可以了。具体如下:

第一项:请求

[request_definition]
r = sub,obj,act

这里的   r = sub,obj,act   ,定义以变量 r 作为请求对象,后面的sub,obj,act这三项是权限控制的维度。以一个普通会员权限管理系统而言,一般第一个sub指代表访问者的标志(如会员ID,会员帐号或会员角色等)(只是一个变量而已,但要和后面的其它项对应使用),第二个obj指访问的URL(如),第三项act为方法(这是每一个URL页面以方法方式再细分的权限单元)。当然还可以有第四参数,第五参数。。。。。。

第二项:策略

[policy_definition]
p = sub,obj,act

这个策略是和请求一一对应的,因为控制请求权限,就需要这个策略做比对,所以参数名字尽量与请求保持一致,以更容易理解。

第三项:策略效果,这个是以第四项为基础的,

# 策略效果
[policy_effect]
e = some(where (p.eft == allow))
# 上面表示有任意一条 policy rule 满足, 则最终结果为 allow;p.eft它可以是allow或deny,它是可选的,默认是allow

第四项,匹配器:

[matchers]
m = r.sub == p.sub && keyMatch(r.obj,p.obj) && (r.act==p.act || p.act == "*") || r.sub=="superTest" || r.sub=="admin"
# r.sub="xxx"表示实体为superTest或admin的直接通过

这个是以第二项为基础对第一项进行判断的逻辑。

所以这个模型文件(Model.conf)也可以写为:

# 请求
[request_definition]
r = member,url,action
# sub ——> 想要访问资源的用户角色(Subject)——请求实体
# obj ——> 访问的资源(Object)
# act ——> 访问的方法(Action: get、post...)

# 策略(.csv文件p的格式,定义的每一行为policy rule;p,p2为policy rule的名字。)
[policy_definition]
p = member,url,action
# p2 = sub,act 表示sub对所有资源都能执行act

# 组定义
[role_definition]
g = _, _
# _,_表示用户,角色/用户组
# g2 = _,_,_ 表示用户, 角色/用户组, 域(也就是租户)

# 策略效果
[policy_effect]
e = some(where (p.eft == allow))
# 上面表示有任意一条 policy rule 满足, 则最终结果为 allow;p.eft它可以是allow或deny,它是可选的,默认是allow

# 匹配器
[matchers]
m = r.member == p.member && keyMatch(r.member,p.url) && (r.action==p.action || p.action == "*") || r.member=="superTest" || r.member=="admin"

# r.sub="xxx"表示实体为superTest的直接通过

5、策略文件Policy.csv,这相当于一个数库文件,也可以用MYSQL代替,此文暂不介绍。

p, admin, /tt, read
p, admin, /tt2, write

这里的数据是以第一个文件里(Model.conf)里的第二项格式进行设置,

 6、Enforce(sub, obj, act)验证权限,

因为casbin是不包含会员系统的,所以这里无法通过登陆动态获取会员号。先引入casbin包,这里直接测试admin用户是否具有URL为/tt页面里read方法以权限,则直接用

Enforce(e, "admin", "/tt", "read")

完整的测试文件如下:

package main

import (
	"fmt"
	"github.com/casbin/casbin/v2"
	"github.com/gin-gonic/gin"
	"log"
	//"log"
	//"runtime"
)

func main() {

	router := gin.Default()
	router.GET("/tt", Tesc)

	router.Run(":8081")

}

func Tesc(c *gin.Context)  {

	e, err := casbin.NewEnforcer("./conf/casbin_rbac_model.conf", "./conf/Policy.csv")
	if err != nil {
		log.Fatalf("NewEnforecer failed:%v\n", err)
	}

	Check(e, "admin", "/tt", "read")
}



func Check(e *casbin.Enforcer, sub, obj, act string) {
	ok, _ := e.Enforce(sub, obj, act)
	if ok {
		fmt.Printf("%s CAN %s %s\n", sub, act, obj)
	} else {
		fmt.Printf("%s CANNOT %s %s\n", sub, act, obj)
	}
}


启动服务器后,访问

http://localhost:8081/tt

控制台输出如下:

zeus-admin:Zeus基于Golang Gin + casbin,致力于做企业统一权限和账号中心管理系统。包含账号管理,数据权限,功能权限,应用管理,多数据库适配,可docker一键运行。社区活跃,版本重组快,加群免费技术支持 Zeus宙斯权限和账号管理系统 项目介绍 Zeus 宙斯权限后台,为企业提供统一后台权限管理私有化Saas云服务。 项目使用golang gin + vue-element-admin框架开发,用jwt + casbin做权限管理,提供OAuth2.0的Restful Api连接。 为企业后台系统提供统一登陆鉴权,菜单管理,权限管理,组织架构管理,员工管理,配置中心,日志管理等。 支持企业微信,钉钉登陆和同步企业组织架构。 统一管理员工入离职,强化权限审批流程化。 打通开源软件,估计Saas软件,企业内部开发系统等,包括不包括jenkis,jira,gitlab,confluence,禅道,企 立即下载

相关推荐

gin-web:由gin + gorm + jwt + casbin组合实现的RBAC权限管理脚手架Golang版, 搭建完成即可快速、高效投入业务开发

Gin Web 由gin + gorm + jwt + casbin组合实现的RBAC权限管理脚手架Golang版, 搭建完成即可快速、高效投入业务开发 特性 RESTful API 设计规范 Gin 一款高效的golang web框架 MySQL 数据库存储 Jwt 用户认证, 登入登出一键搞定 Casbin 基于角色的访问控制模型(RBAC) Gorm 数据库ORM管理框架, 可自行扩展多种数据库类型(主分支已支持gorm 2.0) Validator 请求参数校验, 版本V9 Lumberjack 日志切割工具, 高效分离大日志文件, 按日期保存文件 Viper 配置管理工具, 支持多种配置文件类型 Packr 文件打包工具, 轻松将静态文件打包到编译后的二进制应用中 GoFunk 常用工具包, 某些方法无需重复造轮子 Workflow 工作流程管理(由于golang工作流相关轮子很

gin + casbin

casbin用来做权限认证。作用:我给某个用户分配角色,只有满足相应的匹配规则才能请求到资源。在gin框架中,就是某个用户用get/post等等方式访问某个接口的权限。 先来看perm模型 model中放的就是匹配规则,policy时事先给好的权限,为了数据灵活使用会人为添加到数据库中 request:是哪个用户用户使用哪种方式请求接口。 e就是允许还是不允许 在rbac模型中,会多一个角色域,g=用户,角色 即这个用户拥有这个角色的一切权限 在gin框架运用的整体思路就是先初始化casbin,调用Loa

m0_49049914的博客 2067

基于Gin与Vue的权限管理系统源码

基于Gin与Vue的权限管理系统源码

JAVA的对象访问定位

创建对象是为了访问对象,Java程序通过栈的引用(reference)数据来操作堆上的对象。由于reference类型在Java虚拟机规范中只规定了一个指向对象的引用。并没有规定通过该引用怎么定位,访问堆中的对象。具体需要看虚拟机的实现。 两种访问方式: 句柄访问 直接访问 句柄访问 Java堆中会划分一个句柄池,reference存储的就是对象的句柄地址,而句柄中存放的是对象的实例数据和类型数据的地址信息。 直接访问 Java堆对象布局就必须考虑如何存放访问类型数据的相关信息,referenc

Linux,Java,SpringBoot,Python,Lua略知一点 590

Zeus基于Golang Gin +casbin,致力于做企业统一权限&账号中心管理系统.zip

快应用开发

由gin + gorm + jwt + casbin组合实现的RBAC权限管理脚手架Golang-gin-web.zip

由gin + gorm + jwt + casbin组合实现的RBAC权限管理脚手架Golang-gin-web

Casbin实战:从RBAC到ABAC的权限模型设计与应用

权限管理是后端系统绕不开的难题,很多开发者从简单的if判断开始,最终陷入代码维护与安全漏洞的泥潭。理解认证与授权的边界是第一步,认证解决“你是谁”,授权解决“你能干什么”。在主流权限模型中,RBAC通过用户-角色-权限分层实现高效管理,而ABAC则基于属性动态判断,适合复杂业务场景。Casbin作为跨语言的开源授权库,将模型、策略与效果器分离,开发者只需定义模型文件与策略数据,即可通过Enforce方法完成访问控制。其内置的角色继承、通配符匹配和多租户支持,使得从RBAC平滑扩展到ABAC成为可能。本文结合

weixin_42605397的博客 208

django安装mysqlclient (Windows下正确安装mysqlclient)

由于本人也是初学Python和django。本人使用的Python版本是3.7所以连接MySQL数据库需要安装数据驱动,对应Python3的数据驱动是mysqlclient。因此本人习惯性的使用命令pip install mysqlclient,结果安装失败 (venv) C:\Users\songlihui\PycharmProjects\autotest>pip install my...

songlh1234的博客 2万+

Go语言 gin框架集成Casbin实现访问权限控制

文章目录1. Casbin是什么?1.1 Casbin的model1.1.1 [request_definition]1.1.2 [policy_definition]1.1.3 [role_definition]1.1.4 [policy_effect]1.1.5 [matchers]1.2 Casbin的Policy1.2.1 csv 文件存储1.2.2 适配器存储2. gin集成Casbin实现RESTful接口访问控制2.1 go mod 构建项目2.2 安装依赖包2.3 目录规划说明2.4 项目代

Gcaptain 6652

数字蓝牙功放

数字蓝牙功放(TPA3110+BK8000L),基于D类数字功放芯片TPA3116蓝牙功放,HIFI级带滤波15Wx2蓝牙数字功放,支持有线和蓝牙两种音源输入

runweipa的博客 1418

WPS中VBA支持库安装全攻略:从报错到一键解决

VBA作为Office生态中广泛使用的宏语言,是办公自动化的重要基础。WPS表格虽然兼容Excel文件格式,但出于技术路线与授权原因,默认并未集成完整的VBA引擎与开发环境,导致用户打开含宏文件时频繁遇到“找不到工程或库”“未找到VBA支持库”等报错。理解VBA支持库包含引擎与IDE两层结构,并掌握系统位数、版本匹配、安全软件拦截等前置条件,是成功部署的关键。通过可靠的安装源与规范流程完成配置后,即可实现在WPS中运行Excel宏、批量处理数据、自定义函数等自动化场景,显著提升报表处理效率。本文围绕WPS中

weixin_31102231的博客 305

gin框架学习-Casbin进阶之策略管理API使用方法

gin框架学习-Casbin进阶之策略管理API使用方法

林钟一的博客 1818

ck3m多轴运动控制器笔记1:电机的配置与注意事项

利用PMAC(CK3M)运动控制器来实现对电机的控制,对具体的配置流程和注意事项讲解

p975468132的博客 4640

集成Casbin进行访问权限控制

微信公众号:运维开发故事,作者:乔克 Casbin是什么 Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型,Casbin只负责访问控制。 其功能有: 支持自定义请求的格式,默认的请求格式为{subject, object, action}。 具有访问控制模型model和策略policy两个核心概念。 支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。 支持内置的超级用户 例如:root或administrator。超级用户可以执行任何操作而无需显.

wanger5354的博客 1026

uniapp:微信支付报错requestPayment:fail errors,uniAPP调用uni.requestPayment微信支付提示错误(安卓app、ios苹果app、微信小程序支付报错)

uniapp微信支付报错requestPayment:fail errors,uniApp APP端调起微信支付失败报错requestPayment:fail errors,uniapp微信小程序支付的坑 “errMsg“: “requestPayment:fail errors“,uni.requestPayment微信支付,UNI-APP支付报错“errMsg“: “requestPayment:fail errors“ app微信支付,uniapp 安卓app微信支付报错,uni.requestPay

✅ 精选推荐文章 3915

基于 YOLOv8 的自动驾驶车辆障碍物检测与避障路径规划

本文探讨基于YOLOv8的自动驾驶车辆障碍物检测与避障路径规划系统。在感知层面,采用YOLOv8模型实现多类别障碍物识别,结合单目视觉距离估计和ByteTrack多目标跟踪算法,完成障碍物的稳定检测与运动状态估计。在路径规划层面,设计分层规划架构,融合全局路径规划与局部避障算法,重点实现Frenet坐标系下的采样优化算法和基于模型预测控制的实时避障轨迹生成。通过完整的代码实现与仿真实验,验证系统在复杂交通场景下的有效性与实时性,为自动驾驶开发者提供从理论到实践的完整技术参考。 关键词:YOLOv8;自动驾驶

huanghm88的专栏 248

gin-配合gorm使用casbin的域内RBAC

model文件 [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.o

IT艺术家-rookie的博客 2338

什么是 Agent 的 Context Window?为什么它是 Agent 工程中最核心的约束之一?

什么是 Agent 的 Context Window?为什么它是 Agent 工程中最核心的约束之一?

我哎GIS博客 814

GIn + Casbin: RBAC 权限控制系统集成

现代 Web 应用的安全体系中,「身份认证」与「权限授权」是两大核心支柱。身份认证确认“你是谁”,权限授权决定“你能做什么”。本教程将整合 Gin 框架、JWT 认证与 Casbin RBAC 授权,构建一套完整的双重安全保障方案——通过 JWT 实现无状态身份校验,通过 Casbin RBAC 模型实现精细化权限控制,二者协同工作,既保障接口访问安全,又满足复杂业务场景的权限管理需求。关于JWT认证,请看往期文章:《Gin + JWT 认证机制详解:构建安全的Go Web应用》

qq_44376306的博客 752

损失函数大汇总(五十九)(TopoInteraction Loss附公式推导与代码)

本文介绍了TopoInteraction Loss,一种用于多类别分割任务的拓扑交互约束损失函数。不同于传统拓扑损失关注单类别的连通性和孔洞数量,该损失重点约束不同类别之间的空间关系,包括互斥(exclusion)和包含(containment)两种典型拓扑关系。通过将全局拓扑约束转化为局部邻接检测,该损失能准确定位破坏预设拓扑关系的像素,并针对性施加惩罚。关键创新点在于:1)将包含关系转化为互斥约束;2)使用卷积运算高效检测非法邻接;3)仅对违规像素施加损失。实验表明,该方法能有效纠正类别间的错误接触,特

悦学共鸣,温柔以待,汇聚光芒,共同成长 348

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Casbin之具有超级用户的ACL

Casbin之具有超级用户的ACL

weixin_52690231的博客 364

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Go Gin Gorm Casbin权限管理实现 - 3. 实现Gin鉴权中间件

Casbin是用于Golang项目的功能强大且高效的开源访问控制库。 强大通用也意味着概念和配置较多,具体到实际应用(以Gin Web框架开发)需要解决以下问题: 权限配置的存储,以及增删改查 Gin框架的中间件如何实现 经过一番摸索实践出经验,计划分为三个章节,循序渐进的介绍使用方法 Casbin概念介绍以及库使用 使用Gorm存储Casbin权限配置以及增删改查 实现Gin鉴权中间件

LeoForBest的博客 6453

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

Gin框架使用Casbin进行用户权限校验

以下是测试项目目录 一、配置model conf/casbin_rbac_model.conf # 请求 [request_definition] r = sub,obj,act # sub ——> 想要访问资源的用户角色(Subject)——请求实体 # obj ——> 访问的资源(Object) # act ——> 访问的方法(Action: get、post...) # 策略(.csv文件p的格式,定义的每一行为policy rule;p,p2为policy rule的名字。)

weixin_45566022的博客 4461

go test run 文件_Go 后端系列:Gin+Jwt+casbin RestFul Api 后端一战到底

Go开发环境安装目的本文目的是一个地方,学会完整的全栈开发,搞定后端部分, 后续如果反响好,会吧把前端部分也补充国内下载地址- 官网地址(能访问的可以直接访问)https://golang.org/- 不能访问的请访问国内地址 https://golang.google.cn/dl/当前版本: 1.13.4go modules主意go 1.13以后官方默认支持模块方式,所以我们不在介绍哦之前的使...

weixin_39536010的博客 340

casbin轻量级的基于配置的授权框架

Casbin是一个强大的、高效的开源访问控制框架,其权限管理机制支持多种访问控制模型。Casbin提供了一个执行者 根据提供给执行者的策略和模型文件验证传入的请求。再根据对应的配置授权策略,验证请求判断释放那些行动。在 Casbin 中, 访问控制模型被抽象为基于 PERM (Policy, Effect, Request, Matcher) 的一个配置文件。PERM模式由四个基础(策略、效果、请求、匹配)组成,描述了资源与用户之间的关系。通过配置文件对用户授权更方便授权系统的更改和迭代。

个人学习笔记库,一篇一篇记录成长的足迹 3295

gin-vue-admin学习(后端篇)—— 4.Casbin权限管理

对于此项目的权限管理。在前面阅读中间件源码时候提到了这个。经过这几周的研究,逐渐理解了此项目的权限管理系统。

liangdongld的博客 4678
上一篇: gin项目运行时找不到包,提示package casbin_test/controler is not in GOROOT 的解决办法
下一篇: GO语言的tcp编程之服务器端与客户端
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

php、go编程学习实例

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值