// pkg/middleware/admin_middleware.go package middleware import ( "api_bb/pkg/logger" "api_bb/pkg/utils" "net/http" "go.uber.org/zap" ) // AdminMiddleware проверяет, что пользователь имеет роль администратора func AdminMiddleware(next http.Handler) http.Handler { logger := logger.NewWrapper(logger.Get().With(zap.String("middleware", "admin"))) return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { logger.Info("admin middleware check", zap.String("method", r.Method), zap.String("path", r.URL.Path), zap.String("remote_addr", r.RemoteAddr), ) // Получаем пользователя из контекста user, ok := GetUserFromContext(r.Context()) if !ok { logger.Warn("admin middleware failed - user not found in context") utils.RespondWithError(w, http.StatusUnauthorized, "Authentication required") return } // Проверяем роль пользователя if user.Role != "admin" { logger.Warn("admin middleware failed - insufficient permissions", zap.Uint("user_id", user.ID), zap.String("user_role", user.Role), zap.String("required_role", "admin"), ) utils.RespondWithError(w, http.StatusForbidden, "Insufficient permissions: admin role required") return } logger.Debug("admin middleware passed", zap.Uint("user_id", user.ID), zap.String("user_email", user.Email), ) next.ServeHTTP(w, r) }) }