Files
tp/main_dc/yalarba/api_yal/internal/middleware/admin.go
T
valitovgaziz 75b2f3f6b2 On branch main
modified:   main_dc/yalarba/api_yal/internal/domain/account/dto.go
	new file:   main_dc/yalarba/api_yal/internal/domain/account/errors.go
	modified:   main_dc/yalarba/api_yal/internal/domain/account/handler.go
	modified:   main_dc/yalarba/api_yal/internal/domain/account/router.go
	modified:   main_dc/yalarba/api_yal/internal/domain/account/service.go
	new file:   main_dc/yalarba/api_yal/internal/domain/account/types.go
	new file:   main_dc/yalarba/api_yal/internal/middleware/admin.go
	modified:   main_dc/yalarba/api_yal/internal/middleware/auth.go
	new file:   main_dc/yalarba/api_yal/internal/middleware/context.go
	new file:   main_dc/yalarba/api_yal/internal/middleware/logging.go
	modified:   main_dc/yalarba/api_yal/internal/router/router.go
last but not yet commit
2026-03-31 09:43:18 +05:00

51 lines
1.3 KiB
Go

package middleware
import (
"net/http"
"api_yal/internal/logger"
"go.uber.org/zap"
)
// AdminOnlyMiddleware проверяет, что пользователь имеет права администратора
func AdminOnlyMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
l := logger.Get()
role, ok := GetUserRole(r.Context())
if !ok {
l.Warn("Admin check: user role not found in context")
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
if role != "admin" {
l.Warn("Admin check: insufficient permissions",
zap.String("role", role))
http.Error(w, "Admin access required", http.StatusForbidden)
return
}
next.ServeHTTP(w, r)
})
}
// ModeratorOrAdminMiddleware проверяет, что пользователь имеет права модератора или администратора
func ModeratorOrAdminMiddleware(next http.Handler) http.Handler {
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
role, ok := GetUserRole(r.Context())
if !ok {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
if role != "admin" && role != "moderator" {
http.Error(w, "Moderator or admin access required", http.StatusForbidden)
return
}
next.ServeHTTP(w, r)
})
}