Porter — це легкий, надшвидкий пакет контролю доступу на основі ролей для Laravel, створений Хасаном Ібрагімом. Він розглядає ролі не лише як абстракції бази даних, а як бізнес-логіку. Хасан розробив цей пакет для розробників, які цінують простоту, продуктивність і чисту архітектуру.
Головна концепція Portera полягає в тому, що будь-яка модель може бути визнана Призначеною або Рольовою, а Ростер визначає відношення контролю доступу між ними.
BaseRole.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.