Tyro — це пакет API для створення готових до використання API в Laravel. Він має нульову конфігурацію з автентифікацією, авторизацією, управлінням привілеями, більше ніж 40 командами Artisan та перевіреною безпекою. Завдяки цьому пакету ви можете швидко розробляти безпечні API в Laravel.
Користуючись вбудованими ролями та привілеями Tyro, ви можете захистити маршрути за допомогою медіаторів roles, privilege та privileges:
use Illuminate\Support\Facades\Route;
// Потрібна автентифікація
Route::middleware(['auth:sanctum'])
->get('/profile', ProfileController::class);
// Потрібна конкретна роль
Route::middleware(['auth:sanctum', 'role:admin'])
->get('/admin/dashboard', AdminDashboardController::class);
// Дозволити будь-яку з кількох ролей
Route::middleware(['auth:sanctum', 'roles:admin,editor'])
->post('/articles', ArticleController::class);
// Потрібне конкретне привілеї
Route::middleware(['auth:sanctum', 'privilege:reports.run'])
->get('/reports', ReportController::class);
// Дозволити будь-яке з кількох привілеїв
Route::middleware(['auth:sanctum', 'privileges:billing.view,reports.run'])
->get('/analytics', AnalyticsController::class);
Також ви можете захищати API-маршрути, поєднуючи ролі та привілеї, що називається abilities:
// Потрібні ВСІ можливості (ролі та/або привілеї)
Route::middleware(['auth:sanctum', 'ability:admin,reports.run'])
->post('/reports/export', ReportExportController::class);
// Дозволити БУДЬ-ЯКУ можливість
Route::middleware(['auth:sanctum', 'abilities:admin,super-admin,reports.run'])
->get('/reports/advanced', AdvancedReportController::class);
Ось приклад входу в систему та отримання API-токена одразу після установки Tyro:
curl -X POST http://tyro-demo.test/api/login \
-H "Accept: application/json" \
-H "Content-Type: application/json" \
-d '{"email":"admin@tyro.project","password":"tyro"}'
{
"error": 0,
"id": 1,
"name": "Tyro Admin",
"token": "1|mNYqXI9AfPZw1bppwc3WK1F8WSHNAOnAYqV8RR0Oaa1644f7"
}
# Використання токена
curl http://tyro-demo.test/api/me \
-H "Authorization: Bearer 1|mNYqXI9AfPZw1bppwc3WK1F8WSHNAOnAYqV8RR0Oaa1644f7"
{
"id": 1,
"name": "Tyro Admin",
"email": "admin@tyro.project",
"email_verified_at": null,
"created_at": "2025-11-27T02:46:33.000000Z",
"updated_at": "2025-11-27T02:46:33.000000Z",
"suspended_at": null,
"suspension_reason": null
}
👨💻 Код доступний на GitHub: hasinhayder/tyro