Files
nixcn-cms/middleware/permission.go
Asai Neko 6a9c013799
All checks were successful
Build Backend (NixCN CMS) TeamCity build finished
Build Frontend (NixCN CMS) TeamCity build finished
Use utils.HttpResponse/Abort to replace c.JSON/Abort
Signed-off-by: Asai Neko <sugar@sne.moe>
2026-01-06 12:49:55 +08:00

48 lines
1020 B
Go

package middleware
import (
"nixcn-cms/data"
"nixcn-cms/utils"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
)
func Permission(requiredLevel uint) gin.HandlerFunc {
return func(c *gin.Context) {
var permissionLevel uint
permissionLevelPrev, ok := c.Get("permission_level")
if !ok {
userIdOrig, ok := c.Get("user_id")
if !ok || userIdOrig.(string) == "" {
utils.HttpAbort(c, 401, "", "missing user id")
return
}
userId, err := uuid.Parse(userIdOrig.(string))
if err != nil {
utils.HttpAbort(c, 500, "", "error parsing user id")
return
}
userData, err := new(data.User).GetByUserId(userId)
if err != nil {
utils.HttpAbort(c, 404, "", "user not found")
return
}
permissionLevel = userData.PermissionLevel
c.Set("permission_level", userData.PermissionLevel)
} else {
permissionLevel = permissionLevelPrev.(uint)
}
if permissionLevel < requiredLevel {
utils.HttpAbort(c, 403, "", "permission denied")
return
}
c.Next()
}
}