Добавлена гибкая система авторизации на основе ролей

- Добавлен базовый 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>
This commit is contained in:
Ганеев Артем
2025-10-28 21:23:29 +03:00
parent 736b8031f8
commit 397dad830f
3 changed files with 134 additions and 8 deletions

View File

@@ -20,21 +20,34 @@ 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 := router.Group("/api")
// ========== Защищенные эндпоинты ==========
api := serviceRouter.Group("/api")
{
users := api.Group("/users", h.checkAdminIdentity)
// Группа /users - базовая авторизация на всей группе
users := api.Group("/users", h.userIdentity)
{
users.POST("/:username", h.changeUserRole)
// 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
}