Оптимізація дозволів маршрутів за допомогою розширеної підтримки Enum у Laravel

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 29 листопада, 2024
У статті ми дослідимо нові можливості підтримки enum у Laravel, які спростили перевірку прав доступу в методі Route::can. Дізнайтеся, як ця вдосконалена функціональність допоможе вам створювати чистіший і елегантніший код!

Якщо ви працюєте з 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. Результат — більш прості та виразні визначення маршрутів, які краще відображають структуру прав доступу вашого додатку