- Добавлен базовый 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>
54 lines
1.4 KiB
Go
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
|
|
}
|