Porter — це легкий, надшвидкий пакет контролю доступу на основі ролей для Laravel, створений Хасаном Ібрагімом. Він розглядає ролі не лише як абстракції бази даних, а як бізнес-логіку. Хасан розробив цей пакет для розробників, які цінують простоту, продуктивність і чисту архітектуру.
Головна концепція Portera полягає в тому, що будь-яка модель може бути визнана Призначеною або Рольовою, а Ростер визначає відношення контролю доступу між ними.
# Особливості
- Дизайн, орієнтований на призначення: Розглядає ролі як бізнес-призначення з контекстною логікою.
- Індивідуальні класи ролей: Кожна роль є окремим класом, що розширює
BaseRole. - Ультра-мінімальна архітектура: Лише три основні компоненти для управління призначеннями.
- Неймовірна продуктивність: Оптимізований для швидкості з мінімальною взаємодією з базою даних і вбудованим кешуванням.
- Покращена безпека: Ключі призначення шифруються з використанням вбудованого шифрування Laravel.
- Автоматичний RoleCast: Безшовне перетворення між ключами бази даних та типозахищеними екземплярами RoleContract.
- Ідеальна інтеграція з Laravel: Налаштовані Blade директиви, middleware, а також безшовні Gates і Policies.
# Примірник
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.