Casbin+Gin+XORM的权限控制demo(二)

简介: casbin的增删查(casbin没有update的API,如果需要更新policy,那么只有先删除再添加) 还是直接上代码 package main import ( "fmt" "log" "github.

casbin的增删查(casbin没有update的API,如果需要更新policy,那么只有先删除再添加)

还是直接上代码

package main

import (
    "fmt"
    "log"

    "github.com/casbin/casbin/v2"
    xormadapter "github.com/casbin/xorm-adapter/v2"
    "github.com/gin-gonic/gin"
    _ "github.com/go-sql-driver/mysql"
)

func main() {

    a, err := xormadapter.NewAdapter("mysql", "rbac:123456@tcp(127.0.0.1:3306)/rbac_db?charset=utf8", true)
    if err != nil {
        log.Printf("连接数据库错误: %v", err)
        return
    }
    e, err := casbin.NewEnforcer("rbac_models.conf", a)
    if err != nil {
        log.Printf("初始化casbin错误: %v", err)
        return
    }
    //从DB加载策略
    e.LoadPolicy()

    //获取router路由对象
    r := gin.New()
    //增加policy
    r.POST("/api/v1/add", func(c *gin.Context) {
        fmt.Println("增加Policy")
        if ok, _ := e.AddPolicy("admin", "/api/v1/world", "GET"); !ok {
            fmt.Println("Policy已经存在")
        } else {
            fmt.Println("增加成功")
        }
    })
    //删除policy
    r.DELETE("/api/v1/delete", func(c *gin.Context) {
        fmt.Println("删除Policy")
        if ok, _ := e.RemovePolicy("admin", "/api/v1/world", "GET"); !ok {
            fmt.Println("Policy不存在")
        } else {
            fmt.Println("删除成功")
        }
    })
    //获取policy
    r.GET("/api/v1/get", func(c *gin.Context) {
        fmt.Println("查看policy")
        list := e.GetPolicy()
        for _, vlist := range list {
            for _, v := range vlist {
                fmt.Printf("value: %s, ", v)
            }
        }
    })
    //使用自定义拦截器中间件
    r.Use(Authorize(e))

    //创建请求
    r.GET("/api/v1/hello", func(c *gin.Context) {
        fmt.Println("Hello 接收到GET请求..")
    })

    r.Run(":9000") //参数为空 默认监听8080端口
}

//拦截器
func Authorize(e *casbin.Enforcer) gin.HandlerFunc {

    return func(c *gin.Context) {

        //获取请求的URI
        obj := c.Request.URL.RequestURI()
        //获取请求方法
        act := c.Request.Method
        //获取用户的角色
        sub := "admin1"

        //判断策略中是否存在
        if ok, _ := e.Enforce(sub, obj, act); ok {
            fmt.Println("恭喜您,权限验证通过")
            c.Next()
        } else {
            fmt.Println("很遗憾,权限验证没有通过")
            c.Abort()
        }
    }
}
目录
相关文章
|
Ubuntu
百度搜索:蓝易云【Ubuntu系统永久自动挂载硬盘或分区教程】
现在,Ubuntu系统将会在每次启动时自动挂载指定的硬盘或分区,并且挂载将保持永久有效。请确保配置 `fstab`文件时使用正确的UUID和挂载目录名,以免出现挂载错误。
1307 7
|
机器学习/深度学习 人工智能 自然语言处理
还在想开题报告?SurveyGO卷姬:清华开源学术论文AI写作神器,一键生成文献综述
SurveyGO是清华与面壁智能联合开源的AI论文写作工具,采用LLMxMapReduce-V2技术实现文献智能聚合,能根据用户输入主题快速生成结构严谨、引用可靠的学术综述。
1705 1
还在想开题报告?SurveyGO卷姬:清华开源学术论文AI写作神器,一键生成文献综述
|
9月前
|
存储 人工智能 监控
RFID为化工厂人员安全提供有力保障
RFID技术通过实时定位、动态追踪与智能管控,为化工厂人员安全提供全方位保障。应用于人员定位监控、出入管控、考勤管理及紧急疏散等场景,具备抗干扰、非接触识别、高实时性等优势,助力化工厂构建智能安全防线,推动安全管理向主动预防转型。
|
11月前
|
缓存 数据可视化 Java
Go语言pprof 性能分析与 debug 技巧
本文深入讲解了 Go 语言中 pprof 性能分析与调试技巧,涵盖 CPU、内存、阻塞及 Goroutine 等多维度性能剖析,适用于排查性能瓶颈和服务调优。
|
机器学习/深度学习 供应链 算法
区块链与机器学习:未来科技交叉口的深度洞察
随着科技进步,区块链与机器学习成为焦点技术。区块链以去中心化和安全性革新金融、供应链等领域;机器学习通过算法促进各行业创新。二者结合,区块链提供可靠数据支持机器学习,而机器学习优化区块链性能。应用场景包括金融信用评估、供应链管理、医疗健康及智能合约等。面对数据隐私保护、算法优化等挑战,需跨学科合作并完善政策法规。展望未来,技术突破、产业应用拓展及跨学科人才培养将推动这一领域向前发展。
1098 3
|
JavaScript
1天搞定SpringBoot+Vue全栈开发 (6)组件化开发
1天搞定SpringBoot+Vue全栈开发 (6)组件化开发
|
存储 数据可视化
豆瓣电影Top250的可视化分析
本文旨在实现豆瓣电影TOP250的可视化,通过确定柱状图、折线图和饼图等图表设计,展示评价人数最多、年份分布及类型占比。模拟数据用于演示,例如评价最多的电影、年份最多的电影数量及每年高分电影趋势。完整代码可下载,包含ECharts实现的四种图表。
1400 0
豆瓣电影Top250的可视化分析
|
Java Go
Golang深入浅出之-Goroutine泄漏检测与避免:pprof与debug包
【5月更文挑战第1天】本文介绍了Go语言中goroutine泄漏的问题及其影响,列举了忘记关闭通道、无限循环和依赖外部条件等常见泄漏原因。通过引入`net/http/pprof`和`runtime/debug`包,可以检测和避免goroutine泄漏。使用pprof的HTTP服务器查看goroutine堆栈,利用`debug`包的`SetGCPercent`和`FreeOSMemory`函数管理内存。实践中,应使用`sync.WaitGroup`、避免无限循环和及时关闭通道来防止泄漏。理解这些工具和策略对维护Go程序的稳定性至关重要。
497 4
|
Go
Golang深入浅出之-Go语言代码质量与规范:遵循Gofmt与Linting
【5月更文挑战第1天】本文讨论了如何使用`gofmt`和Lint工具提升Go代码质量。`gofmt`负责自动格式化代码,保持风格统一,而Lint工具如`golint`、`govet`、`staticcheck`则进行静态分析,检查潜在错误和未使用的变量。通过集成`gofmt`检查到CI/CD流程,避免格式冲突,并使用Lint工具发现并修复问题,如未处理的错误、不规范命名。遵循这些最佳实践,可提高代码可读性、团队协作效率和可维护性。
368 3
|
数据采集 JavaScript Shell
AutoJs4.1.0 基本介绍
AutoJs4.1.0 基本介绍
1606 1

热门文章

最新文章