Files

45 lines
1022 B
Go
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
package middleware
import (
"context"
"net/http"
"trade/web/internal/store"
)
type ctxKey string
const userKey ctxKey = "user"
type CtxUser struct {
ID int64
Username string
Role string
}
func FromContext(ctx context.Context) (CtxUser, bool) {
u, ok := ctx.Value(userKey).(CtxUser)
return u, ok
}
// RequireUser 不再校验 JWT直接注入默认管理员用户所有请求放行。
func RequireUser(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
ctx := context.WithValue(r.Context(), userKey, CtxUser{
ID: 1, Username: "admin", Role: store.RoleAdmin,
})
next.ServeHTTP(w, r.WithContext(ctx))
})
}
func RequireAdmin(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
u, ok := FromContext(r.Context())
if !ok || u.Role != store.RoleAdmin {
writeJSON(w, http.StatusForbidden, map[string]string{"error": "admin only"})
return
}
next.ServeHTTP(w, r)
})
}