Laracode
Laracode

Разрешения маршрутов в 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