63 lines
1.1 KiB
Go
63 lines
1.1 KiB
Go
package middleware
|
|
|
|
import (
|
|
"allapp/db"
|
|
"allapp/db/repo"
|
|
"allapp/utils/errorx"
|
|
"allapp/utils/redisx"
|
|
"allapp/utils/responsex"
|
|
"strconv"
|
|
"strings"
|
|
|
|
"github.com/gofiber/fiber/v3"
|
|
)
|
|
|
|
const CtxSpaceIDKey = "space_id"
|
|
|
|
func SpaceGuard() fiber.Handler {
|
|
return func(c fiber.Ctx) error {
|
|
userID, err := GetUserID(c)
|
|
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
spaceIDStr := strings.TrimSpace(c.Get("SPACE_ID"))
|
|
|
|
spaceID, err := strconv.ParseInt(spaceIDStr, 10, 64)
|
|
if err != nil || spaceID <= 0 {
|
|
return responsex.SpaceError(c, "请选择空间")
|
|
}
|
|
|
|
// 校验
|
|
inSpace, err := redisx.SpaceIsMember(spaceID, userID)
|
|
|
|
if inSpace {
|
|
return c.Next()
|
|
}
|
|
|
|
// 检验空间是否存在
|
|
space, err := db.Queries.GetSpaceById(c.Context(), spaceID)
|
|
|
|
if err != nil {
|
|
if errorx.IsNotFound(err) {
|
|
// 未找到
|
|
return responsex.SpaceError(c, "空间已失效")
|
|
}
|
|
return err
|
|
}
|
|
|
|
// 空间有效,判断是否在该空间内
|
|
role, err := db.Queries.GetUserSpaceRole(c.Context(), repo.GetUserSpaceRoleParams{
|
|
SpaceID: spaceID,
|
|
UserID: spaceID,
|
|
})
|
|
if err != nil {
|
|
if errorx.IsNotFound(err) {
|
|
|
|
}
|
|
}
|
|
|
|
}
|
|
}
|