Files
auth-service/internal/handler/handler.go
Ганеев Артем 397dad830f Добавлена гибкая система авторизации на основе ролей
- Добавлен базовый middleware userIdentity для валидации токенов
- Реализован middleware requireRole для проверки конкретных ролей
- Добавлены вспомогательные методы requireAdmin, requireTeacher, requireStudent
- Обновлена структура роутов с разделением прав доступа
- Добавлены примеры handler'ов: getAllUsers, getUserByUsername, deleteUser
- Исправлен роутинг api группы (было router.Group, стало serviceRouter.Group)

Теперь поддерживается:
- GET /api/users - доступ для всех авторизованных пользователей
- GET /api/users/:username - доступ для всех авторизованных
- POST /api/users/:username - только для администраторов
- DELETE /api/users/:username - только для администраторов

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
2025-10-28 21:23:29 +03:00

54 lines
1.4 KiB
Go

package handler
import (
"authorization/internal/service"
"github.com/gin-gonic/gin"
)
type Handler struct {
services *service.Service
}
func NewHandler(services *service.Service) *Handler {
return &Handler{
services: services,
}
}
func (h *Handler) InitRoutes() *gin.Engine {
router := gin.New()
serviceRouter := router.Group("/auth-service")
{
// ========== Публичные эндпоинты (без авторизации) ==========
auth := serviceRouter.Group("/auth")
{
auth.POST("/sign-up", h.signUp)
auth.POST("/sign-in", h.signIn)
auth.POST("/refresh", h.refresh)
}
// ========== Защищенные эндпоинты ==========
api := serviceRouter.Group("/api")
{
// Группа /users - базовая авторизация на всей группе
users := api.Group("/users", h.userIdentity)
{
// GET /api/users - любой авторизованный пользователь
users.GET("", h.getAllUsers)
// GET /api/users/:username - любой авторизованный пользователь
users.GET("/:username", h.getUserByUsername)
// POST /api/users/:username - ТОЛЬКО администраторы
users.POST("/:username", h.requireAdmin(), h.changeUserRole)
// DELETE /api/users/:username - ТОЛЬКО администраторы
users.DELETE("/:username", h.requireAdmin(), h.deleteUser)
}
}
}
return router
}