实现 jwt、密码加密、casbin 的接入

This commit is contained in:
2025-05-27 15:46:25 +08:00
parent 81594a8972
commit 37b4055924
43 changed files with 618 additions and 325 deletions

View File

@ -2,12 +2,10 @@ package cmd
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"github.com/gogf/gf/v2/net/ghttp"
"github.com/gogf/gf/v2/os/gcmd"
"server/internal/controller/hello"
"server/internal/middleware"
)
var (
@ -19,9 +17,15 @@ var (
s := g.Server()
s.Group("/", func(group *ghttp.RouterGroup) {
group.Middleware(ghttp.MiddlewareHandlerResponse)
group.Bind(
hello.NewV1(),
)
group.Bind()
group.Group("/x", func(group *ghttp.RouterGroup) {
group.Middleware(
middleware.Auth,
middleware.Casbin,
middleware.Response,
)
group.Bind()
})
})
s.Run()
return nil

View File

@ -1,5 +0,0 @@
// =================================================================================
// This is auto-generated by GoFrame CLI tool only once. Fill this file as you wish.
// =================================================================================
package hello

View File

@ -1,15 +0,0 @@
// =================================================================================
// Code generated and maintained by GoFrame CLI tool. DO NOT EDIT.
// =================================================================================
package hello
import (
"server/api/hello"
)
type ControllerV1 struct{}
func NewV1() hello.IHelloV1 {
return &ControllerV1{}
}

View File

@ -1,13 +0,0 @@
package hello
import (
"context"
"github.com/gogf/gf/v2/frame/g"
"server/api/hello/v1"
)
func (c *ControllerV1) Hello(ctx context.Context, req *v1.HelloReq) (res *v1.HelloRes, err error) {
g.RequestFromCtx(ctx).Response.Writeln("Hello World!")
return
}

View File

@ -0,0 +1,27 @@
package middleware
import (
"github.com/gogf/gf/v2/net/ghttp"
"server/utility/ecode"
"server/utility/myCasbin"
)
// Casbin 是用于访问权限控制的中间件。
//
// 该中间件基于 Casbin 权限控制框架,校验当前用户是否有权访问指定的 URL 和请求方法。
// 用户权限从请求上下文中的 "permission" 字段获取,该字段通常由前置中间件(如 Auth注入。
//
// 参数:
//
// r *ghttp.Request - 当前的 HTTP 请求对象,由框架自动传入。
//
// 行为:
// - 如果权限验证未通过终止请求返回权限不足的错误ecode.Denied
// - 如果权限验证通过:继续执行后续中间件或处理逻辑。
func Casbin(r *ghttp.Request) {
permission := r.GetCtxVar("permission").String()
if !myCasbin.GetMyCasbin().HasPermission(permission, r.URL.Path, r.Method) {
Exit(r, ecode.Denied)
}
r.Middleware.Next()
}

View File

@ -0,0 +1,14 @@
package middleware
import (
"github.com/gogf/gf/v2/errors/gerror"
"github.com/gogf/gf/v2/net/ghttp"
)
func Exit(r *ghttp.Request, err error) {
r.Response.WriteJsonExit(ghttp.DefaultHandlerResponse{
Code: gerror.Code(err).Code(),
Message: gerror.Code(err).Message(),
Data: nil,
})
}

View File

@ -1 +1,7 @@
package packed
import (
_ "github.com/gogf/gf/contrib/drivers/mysql/v2"
_ "github.com/gogf/gf/contrib/nosql/redis/v2"
_ "server/utility/myCasbin"
)