Разрешения маршрутов в Laravel на основе Enum
Laravel упростил проверку прав доступа в маршрутах, добавив прямую поддержку enum в метод can(). Теперь нет необходимости явно обращаться к свойству value, что делает определения маршрутов чище и выразительнее.
Эта функция особенно полезна при создании админ-панелей и многопользовательских (multi-tenant) приложений, где управление доступом играет ключевую роль, а также позволяет использовать преимущества типизированности PHP.
Route::get('/admin', function () {
// ...
})->can(Permission::Admin);
Реализация маршрутизации на основе ролей в админ-панели
1. Определяем enum с правами доступа:
<?php
namespace App\Enums;
enum AdminAccess: string
{
case ViewReports = 'view_reports';
case ManageStaff = 'manage_staff';
case EditConfig = 'edit_config';
}
2. Определяем маршруты с использованием enum:
// web.php
Route::prefix('admin')->group(function () {
Route::get('/reports', ReportController::class)
->can(AdminAccess::ViewReports);
Route::get('/staff', StaffController::class)
->can(AdminAccess::ManageStaff);
Route::post('/config', ConfigController::class)
->can(AdminAccess::EditConfig);
});
Улучшение читаемости кода
Ранее приходилось писать так:
->can(AdminAccess::ManageStaff->value)
Теперь можно использовать более лаконичный и читаемый вариант:
->can(AdminAccess::ManageStaff)
Обновленный метод can() делает маршрутизацию на основе прав доступа более элегантной, сохраняя при этом преимущества типизированности PHP.
Последнее обновление 16.02.2025