iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > GO >Gogin权限验证实现过程详解
  • 330
分享到

Gogin权限验证实现过程详解

Gogin权限验证Gogin 2023-01-08 12:01:29 330人浏览 安东尼
摘要

目录权限管理1. 特征2. 怎么运行的3. 安装4. 示例代码权限管理 Casbin是用于golang项目的功能强大且高效的开源访问控制库。 1. 特征 Casbin的作用: 以经

权限管理

Casbin是用于golang项目的功能强大且高效的开源访问控制库。

1. 特征

Casbin的作用:

  • 以经典{subject, object, action}形式或您定义的自定义形式实施策略,同时支持允许和拒绝授权。
  • 处理访问控制模型及其策略的存储。
  • 管理角色用户映射和角色角色映射(RBAC中的角色层次结构)。
  • 支持内置的超级用户,例如root或administrator。超级用户可以在没有显式权限的情况下执行任何操作。
  • 多个内置运算符支持规则匹配。例如,keyMatch可以将资源键映射/foo/bar到模式/foo*。 Casbin不执行的操作:
  • 身份验证(又名验证username以及passWord用户登录时)
  • 管理用户或角色列表。我相信项目本身管理这些实体会更方便。用户通常具有其密码,而Casbin并非设计为密码- 容器。但是,Casbin存储RBAC方案的用户角色映射。

2. 怎么运行的

在Casbin中,基于PERM元模型(策略,效果,请求,匹配器)将访问控制模型抽象为CONF文件。因此,切换或升级项目的授权机制就像修改配置一样简单。您可以通过组合可用的模型来定制自己的访问控制模型。例如,您可以在一个模型中同时获得RBAC角色和ABAC属性,并共享一组策略规则。

Casbin中最基本,最简单的模型是ACL。ACL的CONF模型为:

#请求定义
[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

ACL模型的示例策略如下:

p, alice, data1, read
p, bob, data2, write

3. 安装

Go get GitHub.com/casbin/casbin

4. 示例代码

package main
import (
    "fmt"
    "log"
    "github.com/casbin/casbin"
    xORMadapter "github.com/casbin/xorm-adapter"
    "github.com/gin-gonic/gin"
    _ "github.com/go-sql-driver/Mysql"
)
func main() {
    // 要使用自己定义的数据库rbac_db,最后的true很重要.默认为false,使用缺省的数据库名casbin,不存在则创建
    a, err := xormadapter.NewAdapter("mysql", "root:root@tcp(127.0.0.1:3306)/goblog?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()
    r.POST("/api/v1/add", func(c *gin.Context) {
        fmt.Println("增加Policy")
        if ok, _ := e.AddPolicy("admin", "/api/v1/hello", "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/hello", "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 := "admin"
        //判断策略中是否存在
        if ok, _ := e.Enforce(sub, obj, act); ok {
            fmt.Println("恭喜您,权限验证通过")
            c.Next()
        } else {
            fmt.Println("很遗憾,权限验证没有通过")
            c.Abort()
        }
    }
}

rbac_models.conf里面的内容如下:

[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

配置链接数据库不需要手动创建数据库,系统自动创建casbin_rule表

使用postman请求Http://localhost:9000/api/v1/hello

运行解决结果显示为很遗憾,权限验证没有通过

下面我在数据表中添加数据在演示的时候可以直接手动按照图片的格式直接添加数据表,或者使用postman POST方式请求http://localhost:9000/api/v1/add

然后继续请求http://localhost:9000/api/v1/hello

以上就是Go gin权限验证实现过程详解的详细内容,更多关于Go gin权限验证的资料请关注编程网其它相关文章!

您可能感兴趣的文档:

--结束END--

本文标题: Gogin权限验证实现过程详解

本文链接: https://www.lsjlt.com/news/177082.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Gogin权限验证实现过程详解
    目录权限管理1. 特征2. 怎么运行的3. 安装4. 示例代码权限管理 Casbin是用于Golang项目的功能强大且高效的开源访问控制库。 1. 特征 Casbin的作用: 以经...
    99+
    2023-01-08
    Go gin权限验证 Go gin
  • gogin+token(JWT)验证实现登陆验证
    1.准备 go get github.com/dgrijalva/jwt-go go get github.com/gin-gonic/gin  2.代码 package ...
    99+
    2024-04-02
  • Golang利用casbin实现权限验证详解
    目录导语Casbin是什么实现思路导语 学习一下golang权限控制,保留一下demo代码作为参考 Casbin是什么 Casbin是一个强大的、高效的开源访问控制框架,其权限管理机...
    99+
    2023-02-03
    Golang casbin权限验证 Golang 权限验证 Golang casbin
  • JavaScript表单验证实现过程详解
    目录一. 作用二. 需求三. 实现一. 作用 如果没有表单验证,错误的数据就会发往服务端,会造成服务端压力过大; 所以在前端对数据进行过滤,以减轻服务端压力; 二. 需求 1. 当输...
    99+
    2023-01-30
    JavaScript表单验证 JS表单验证
  • C# JWT权限验证的实现
    目录什么是JWT,它是一种对API的保护方案,为什么要进行保护呢设计原则第一步:创建token第二步:解析token什么是JWT,它是一种对API的保护方案,为什么要进行保护呢 防泄...
    99+
    2024-04-02
  • PHP中怎么实现全站权限验证
    PHP中怎么实现全站权限验证,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。PHP全站权限验证代码示例:< html> <&...
    99+
    2023-06-17
  • springboot整合shiro实现登录验证授权的过程解析
    springboot整合shiro实现登录验证授权,内容如下所示: 1.添加依赖: <!-- shiro --> <dependency> ...
    99+
    2024-04-02
  • springboot如何整合shiro实现登录验证授权的过程解析
    本篇文章为大家展示了springboot如何整合shiro实现登录验证授权的过程解析,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。springboot整合shiro实现登录验证授权,内容如下所示:1...
    99+
    2023-06-29
  • SpringBoot Security使用MySQL实现验证与权限管理
    目录1. 创建用户表和虚拟凭据2. 配置数据源属性3. 声明弹簧安全性和MySQL JDBC驱动程序的依赖关系4. 配置 JDBC 身份验证详细信息5. 自定义登录验证过程6. 登录...
    99+
    2022-11-13
    SpringBoot Security MySQL登陆验证 SpringBoot Security MySQL权限管理
  • SpringBootSession接口验证实现流程详解
    目录添加pom.xml创建简单的测试接口使用过滤器实现使用拦截器实现需求:只有用户登录成功后,才能访问其它接口,否则提示需要进行登录 项目仓库地址:https://gitee.com...
    99+
    2024-04-02
  • C++ TensorflowLite模型验证的过程详解
    故事是这样的: 有一个手撑检测的tflite模型,需要在开发板上跑起来。手机版本的已成熟,要移植到开发板上。现在要验证tflite模型文件在板子上的运行结果要和手机上一致。 前提:为...
    99+
    2024-04-02
  • MySQL 中的权限管理及验证流程
    目录引言权限的验证流程第一层:用户登录第二层:全局权限第三层:数据库级别权限第四层 :数据表级权限第五层:字段级权限第六层:对象级权限总结引言 某天,女朋友突然问你:“还...
    99+
    2024-04-02
  • Spring Security认证器实现过程详解
    目录拦截请求验证过程返回完整的Authentication收尾工作结论一些权限框架一般都包含认证器和决策器,前者处理登陆验证,后者处理访问资源的控制 Spring Security的...
    99+
    2024-04-02
  • 详解Oracle创建用户权限全过程
    Oracle创建用户权限的全过程主要包括以下几个步骤:1. 使用具有创建用户权限的特权用户登录到Oracle数据库。2. 创建用户。...
    99+
    2023-09-22
    Oracle
  • Springboot整合Shiro实现登录与权限校验详细解读
    目录Springboot-cli 开发脚手架系列简介前言1. 环境2. 简介3. Realm配置4. 核心配置5. 接口编写6. 网页资源7. 效果演示8. 源码分享Springbo...
    99+
    2024-04-02
  • SpringBoot实现滑块验证码验证登陆校验功能详解
    目录前言一、实现效果二、实现思路三、实现步骤1. 后端 java 代码1.1 新建一个拼图验证码类1.2 新建一个拼图验证码工具类1.3 新建一个 service 类1.4 新建一个...
    99+
    2024-04-02
  • Python实现滑块验证码详解
    本节要讲解如下图所示的滑块验证码(更为复杂的滑动拼图验证码在下一篇介绍)。这种验证码机制比较简单:将滑块拖动到滑轨的最右端即可完成验证,如下图所示。如果未将滑块拖动到滑轨的最右端,则...
    99+
    2024-04-02
  • PythonFlask实现图片验证码与邮箱验证码流程详细讲解
    目录1. 图片验证码1.1 工具类-utility.py1.2 控制层-user.py2. 邮箱验证码2.1 准备2.2 工具类-utility.py2.3 控制层-user.py1...
    99+
    2024-04-02
  • Java web如何实现一个验证码权限登录功能
    今天就跟大家聊聊有关Java web如何实现一个验证码权限登录功能,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。所用到的开发工具为myeclipse10,MySQL数据库。首先,在m...
    99+
    2023-05-31
    javaweb 验证码 ava
  • Shiro Realm权限认证怎么实现
    这篇文章主要讲解了“Shiro Realm权限认证怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Shiro Realm权限认证怎么实现”吧!shiro下载要学习 shiro,我们首先...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作