Якщо ви працюєте з enum і методом Route::can() у Laravel, напевно, ви знайомі з необхідністю додавати ->value під час перевірки прав. Тепер Laravel спростив цей процес завдяки вбудованій підтримці enum для маршрутів. Давайте розглянемо це вдосконалення, яке робить ваш код чистішим і елегантнішим.
Ось як змінився синтаксис:
// Старий підхід
Route::get('/posts', function () {...})->can(PostPermissions::CREATE_POST->value);
// Новий підхід
Route::get('/posts', function () {...})->can(PostPermissions::CREATE_POST);
Тепер без ->value — це просто!
Розгляньмо впровадження цього в системі управління контентом з різними рівнями доступу:
<?php
namespace App\Enums;
use App\Enums\BackedEnum;
class ContentPermissions extends BackedEnum
{
case VIEW_CONTENT = 'view_content';
case PUBLISH_POST = 'publish_post';
case MODERATE_COMMENTS = 'moderate_comments';
}
Route::prefix('content')->group(function () {
Route::get('/dashboard', [ContentController::class, 'index'])
->can(ContentPermissions::VIEW_CONTENT);
Route::post('/posts', [PostController::class, 'store'])
->can(ContentPermissions::PUBLISH_POST);
Route::put('/comments/{comment}', [CommentController::class, 'update'])
->can(ContentPermissions::MODERATE_COMMENTS);
});
У цьому прикладі ми:
Цей підхід підвищує читабельність коду та зберігає безпеку типів завдяки backed enum у PHP. Результат — більш прості та виразні визначення маршрутів, які краще відображають структуру прав доступу вашого додатку