Права доступу до маршрутів у Laravel, що використовують Enum

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 15 лютого, 2025
Laravel спростив перевірку дозволів у маршрутах, додавши підтримку enum безпосередньо до методу can(). Ця функція дозволяє створювати більш зрозумілі та виразні визначення маршрутів, що особливо важливо при розробці адмінок та багатокористувацьких додатків. Чи готові ви дізнатися, як зробити ваш код ще чистішим і зручнішим? Читайте далі!

Laravel спростив перевірку дозволів у маршрутах, додавши пряму підтримку enum до методу can(). Це нововведення усуває необхідність явно отримувати значення enum, що робить визначення маршрутів більш зрозумілими і виразними.

Ця функція особливо корисна при створенні адмін-панелей або багатокористувацьких додатків, де управління дозволами є важливим, і ви хочете використовувати можливості типобезпечності PHP.

Route::get('/admin', function () {
    // ...
})->can(Permission::ACCESS_ADMIN);

Ось як реалізувати маршрути на основі ролей у адмін-панелі:

// app/Enums/AdminAccess.php

<?php

namespace App\Enums;

enum AdminAccess: string
{
    case VIEW_REPORTS = 'view_reports';
    case MANAGE_STAFF = 'manage_staff';
    case EDIT_CONFIG = 'edit_config';
}

// web.php
Route::prefix('admin')->group(function () {
    Route::get('/reports', ReportController::class)
        ->can(AdminAccess::VIEW_REPORTS);
    
    Route::get('/staff', StaffController::class)
        ->can(AdminAccess::MANAGE_STAFF);
    
    Route::post('/config', ConfigController::class)
        ->can(AdminAccess::EDIT_CONFIG);
});

Визначення маршрутів стали інтуїтивно зрозумілішими та легшими для супроводження:

// Попередній підхід
->can(AdminAccess::MANAGE_STAFF->value)
// Новий, чистіший підхід
->can(AdminAccess::MANAGE_STAFF)

Покращений метод can() робить маршрути на основі дозволів більш елегантними, зберігаючи переваги типізаційності PHP