Легкий менеджер контролю доступу для Laravel з Porter

Перекладено ШІ
Оригінал: Laravel News
Оновлено: 09 вересня, 2025
Пориньте у світ Porter — легкого та швидкого пакета контролю доступу на основі ролей для Laravel, створеного Хассаном Ібрагімом. Чи готові ви спростити управління доступом у ваших проектах? У статті ми розглянемо переваги цього пакета та чудові можливості, які він пропонує

Porter — це легкий, надшвидкий пакет контролю доступу на основі ролей для Laravel, створений Хасаном Ібрагімом. Він розглядає ролі не лише як абстракції бази даних, а як бізнес-логіку. Хасан розробив цей пакет для розробників, які цінують простоту, продуктивність і чисту архітектуру.

Головна концепція Portera полягає в тому, що будь-яка модель може бути визнана Призначеною або Рольовою, а Ростер визначає відношення контролю доступу між ними.

# Особливості

# Примірник

use Hdaklue\Porter\Facades\Porter;
 
// Призначення ролі
Porter::assign($user, $project, 'admin');
 
// Перевірка ролі користувача
$isAdmin = $user->hasRoleOn($project, 'admin');
 
// Видалення ролі
Porter::remove($user, $project);
 
// Зміна ролі
Porter::changeRoleOn($user, $project, 'editor');

Porter також має інтерактивну команду Artisan, яка дозволяє створювати класи ролей.

php artisan porter:create

Приклад класу ролі може виглядати так:

use App\Porter\BaseRole; // Основний клас ролі вашого застосунку
 
final class AssistantRegionalManager extends BaseRole
{
    public function getName(): string
    {
        return 'assistant_regional_manager';
    }
 
    public function getLevel(): int
    {
        return 8;
    }
 
    public function getDescription(): string
    {
        return "Ми завжди потребували офісного супергероя, що любить буряк і займається карате.";
    }
}

Ви також можете інтегрувати це зі своїми моделями Laravel, використовуючи трейти CanBeAssignedToEntity та ReceivesRoleAssignments:

use Hdaklue\Porter\Concerns\{CanBeAssignedToEntity, ReceivesRoleAssignments};
 
class User extends Authenticatable
{
    use CanBeAssignedToEntity;
 
    // Ваш існуючий код моделі User...
}
 
class Project extends Model
{
    use ReceivesRoleAssignments;
 
    // Ваш існуючий код моделі Project...
}

На момент написання, Porter все ще є досить новим, і Хасан зацікавлений отримати відгуки та допомогу від спільноти у впровадженні нових функцій.

Щоб дізнатися більше про цей пакет, зробити свій внесок та переглянути вихідний код, ви можете знайти репозиторій на GitHub.