Go Gin Gorm Casbin权限管理实现 - 3. 实现Gin鉴权中间件
package main
import (
"github.com/gin-gonic/gin"
"github.com/casbin/casbin/v2"
"net/http"
)
// 鉴权中间件
func AuthMiddleware(e *casbin.Enforcer) gin.HandlerFunc {
return func(c *gin.Context) {
// 获取请求的URI和用户的角色
uri := c.Request.RequestURI
role := c.MustGet("ROLE").(string)
// 判断角色是否有权限访问URI
allowed, _ := e.Enforce(role, uri, c.Request.Method)
if !allowed {
c.AbortWithStatusJSON(http.StatusForbidden, gin.H{"error": "无权访问"})
return
}
// 如果有权限,则继续请求处理
c.Next()
}
}
// 示例中的主函数和其他代码
func main() {
// ... 其他代码保持不变
}
这段代码定义了一个鉴权中间件AuthMiddleware
,它使用casbin的Enforcer
来判断用户是否有权限访问特定的URI和方法。如果用户有权限,则调用c.Next()
继续请求处理流程;如果无权限,则返回HTTP 403 Forbidden响应。这是一个典型的基于角色的访问控制(RBAC)的实现,它为Gin应用提供了一个高效的鉴权机制。
评论已关闭