Files
tp/serv_nginx/api_bb/pkg/middleware/admin_middleware.go
T
valitovgaziz 6422d85727 modified: serv_nginx/api_bb/internal/database/migrate.go
new file:   serv_nginx/api_bb/internal/handlers/event_handler.go
	new file:   serv_nginx/api_bb/internal/handlers/event_registration_handler.go
	modified:   serv_nginx/api_bb/internal/handlers/handlers.go
	modified:   serv_nginx/api_bb/internal/models/event.go
	modified:   serv_nginx/api_bb/internal/routes/routes.go
	new file:   serv_nginx/api_bb/internal/service/event_registration_service.go
	new file:   serv_nginx/api_bb/internal/service/event_service.go
	new file:   serv_nginx/api_bb/pkg/middleware/admin_middleware.go
add admin middleware, add event and eventRegistration handlers, routes,
services, EndPoints
2025-10-19 10:54:45 +05:00

50 lines
1.4 KiB
Go

// 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)
})
}