基本信息
文件名称:Golang利用casbin实现权限验证详解.docx
文件大小:16.57 KB
总页数:5 页
更新时间:2025-07-02
总字数:约3.23千字
文档摘要

Golang利用casbin实现权限验证详解

目录导语Casbin是什么实现思路

导语

学习一下golang权限控制,保留一下demo代码作为参考

Casbin是什么

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

其功能有:

支持自定义请求的格式,默认的请求格式为{subject,object,action}。具有访问控制模型model和策略policy两个核心概念。支持RBAC中的多层角色继承,不止主体可以有角色,资源也可以具有角色。支持内置的超级用户例如:root或administrator。超级用户可以执行任何操作而无需显式的权限声明。支持多种内置的操作符,如keyMatch,方便对路径式的资源进行管理,如/foo/bar可以映射到/foo*

实现思路

packagemain

import(

fmt

/casbin/casbin/v2

gormadapter/casbin/gorm-adapter/v3

_/go-sql-driver/mysql

funcmain(){

//e,err:=casbin.NewEnforcer(model.conf,policy.csv)//本地policy

a,_:=gormadapter.NewAdapter(mysql,root:pass@tcp(localhost:3306)/casbincharset=utf8mb4parseTime=Trueloc=Local,true)//数据库policy

e,_:=casbin.NewEnforcer(./model.conf,a)//model依旧放本地没有必要放数据库把a变成了适配器存到了数据库

//LoadthepolicyfromDB.

e.LoadPolicy()

//Checkthepermission.

e.Enforce(alice,data1,read)

//Modifythepolicy.

//e.AddPolicy(...)

//e.RemovePolicy(...)

//SavethepolicybacktoDB.

e.SavePolicy()

sub:=alice//想要访问资源的用户

obj:=data1//将要被访问的资源

act:=read//用户对资源实施的操作

//added,err:=e.AddPolicy(alice,data1,read)//added返回是bool类型

//fmt.Println(added)

//fmt.Println(err)

//iferr!=nil{

////处理错误

//fmt.Printf(%s,err)

ok,err:=e.Enforce(sub,obj,act)

iferr!=nil{

//处理错误

fmt.Printf(%s,err)

ifok==true{

//允许alice读取data1

fmt.Println(通过)

}else{

//拒绝请求,抛出异常

fmt.Println(未通过)

//您可以使用BatchEnforce()去批量处理一些请求。

//这个方法返回一个布尔类型的切片,切片的下标对应二位数组的行标

//例如results[0]是{alice,data1,read}的结果

//results,err:=e.BatchEnforce([][]interface{}{{alice,data1,read},{bob,data2,write},{jack,data3,read}})

}

packagemain

import(

fmt

/casbin/casbin/v2

gormadapter/casbin/gorm-adapter/v3

_/go-sql-driver/mysql

funcmain(){

//e,err:=casbin.NewEnforcer(model.conf,policy.csv)//本地policy

a,_:=gormadapter.NewAdapter(my