超简单实现项目中的Casbin鉴权

Casbin鉴权步骤

第零步:安装Casbin

第一步:编写权限管理模型

第二步:加载数据库中的权限列表

第三步:创建中间件

第四步:进行鉴权

第五步:在项目启动时加载鉴权模块

第六步: 添加权限列表


演示代码以 golang gin gorm 为例

先给大家展示一下项目框架

大家可以对照一下,方便后续上手

第零步:安装Casbin

go get github.com/casbin/gorm-adapter/v3

 

第一步:编写权限管理模型

app/casbin/model.config

[request_definition]
	r = sub, obj, act

[policy_definition]
	p = sub, obj, act, eft

[role_definition]
	g = _, _

[policy_effect]
	e = some(where (p.eft == allow)) && !some(where (p.eft == deny))

[matchers]
	m = g(r.sub, p.sub) && keyMatch(r.act, p.act) && keyMatch(r.obj, p.obj)

这里使用的是RBAC模型,大家可以根据需求自行更改

第二步:加载数据库中的权限列表

app/casbin/casbin.go

var Casbin *casbin.Enforcer

func InitCasbin() error {
    // 注意!!!
    // 此处的数据库链接信息需要改成自己的
    str := "user:pass@tcp(127.0.0.1:3306)/dbname?charset=utf8mb4&parseTime=True&loc=Local"
    a, err := gormadapter.NewAdapter("mysql", str, true)

	e, err := casbin.NewEnforcer("app/casbin/model.conf", a)
	if err != nil {
		panic(err)
	}

	Casbin = e

	err = Casbin.LoadPolicy()
	if err != nil {
		return err
	}
	return nil
}

一定注意,要把数据库链接信息改成自己的,要不然会报错的哦~

数据库中要先创建一个名为casbin的数据库~

第三步:创建中间件

pkg/middlewares/authMiddleware.go

func CasbinAuth(e *casbin.Enforcer) gin.HandlerFunc {
	return func(c *gin.Context) {
		//path := c.Request.URL.Path
		obj := c.Request.URL.RequestURI()
		//获取请求方法
		act := c.Request.Method
		//获取用户的角色 —— 这一步需要根据实际情况更改
		authHeader := c.Request.Header.Get("Authorization")
		parts := strings.SplitN(authHeader, " ", 2)
		token := strings.TrimSpace(parts[1])
		// 校验 token
		mc, _ := jwt.ValidateToken(token)
		//判断策略中是否存在
		sub := mc.Nickname
		if ok, _ := e.Enforce(sub, obj, act); ok {
			fmt.Println("恭喜您,权限验证通过")
			c.Next()
		} else {
			fmt.Println("很遗憾,权限验证没有通过")
			resp.ResponseErrorWithMsg(c, resp.CodeInvalidAuthFormat, "没有权限呢,杂鱼杂鱼~")
			c.Abort()
		}
	}
}

注意:

这里用户信息是解析token得来的,这里需要根据你项目的实际情况进行更改,目的是获取到用户名

第四步:进行鉴权

app/manager/router/manager.go (项目中只有这个需要鉴权,大家根据需要添加即可)

func RegisterManagerRoutes(r *gin.Engine) {
	useMiddleWare := r.Group("/api/v1/manager").Use(middlewares.CasbinAuth(casbin.Casbin))
	{
        // 添加需要过滤的内容 ,如下
        useMiddleWare.POST("/add", apis.Insert)
	}
}

第五步:在项目启动时加载鉴权模块

main.go

func main() {	
    if err := casbin.InitCasbin(); err != nil {
		fmt.Printf("init casbin failed, err:%v\n", err)
		return
	}
}

第六步: 添加权限列表

操作完以上步骤之后可以先运行一下,数据库中就会多出一个 casbin_rule 表

之后往表中添加所需权限即可

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值