Пакет Laravel Ownable, розроблений Абдуллою Совейлем, надає зручний і гнучкий спосіб управління правом власності на будь-яку модель з іншої моделі у вашій Laravel аплікації.
Припустимо, у нас є моделі User
та Task
. Завдяки пакету Laravel Ownable ми можемо представити право власності, використовуючи контракти Owner
та Ownable
, а також трейт HasOwnables
і IsOwnable
у відповідних моделях.
use Sowailem\Ownable\Traits\HasOwnables;
use Sowailem\Ownable\Contracts\Owner as OwnerContract;
// Модель власника (наприклад, User)
class User extends Authenticatable implements OwnerContract
{
use HasOwnables;
}
use Sowailem\Ownable\Traits\IsOwnable;
use Sowailem\Ownable\Contracts\Ownable as OwnableContract;
// Модель з правом власності
class Task extends Model implements OwnableContract
{
use IsOwnable;
}
Тепер у вас є доступ до кількох методів, які дозволяють надати, забрати, видалити та перевірити право власності.
$user = User::first();
$task = Task::first();
// Надати право власності на задачу користувачу
$user->giveOwnershipTo($task);
$task->ownedBy($user);
if ($task->isOwnedBy($user)) {
// Перевірка, чи належить задача користувачу
}
// Передача прав власності іншому користувачу
$someOtherUser = User::find(2);
$user->transferOwnership($task, $someOtherUser);
// Отримати поточного власника об'єкта
$currentOwner = $task->currentOwner();
// Отримати всіх власників (включно з історією власності)
$allOwnersOfTheTask = $task->owners()->get();
// Прибрати право власності
$user->takeOwnershipFrom($task);
Якщо ви віддаєте перевагу використовувати реалізацію фасаду, вона також доступна.
use Illuminate\Support\Facades\Log;
use Sowailem\Ownable\Facades\Owner;
$user = User::find(4);
$task = Task::find(2);
Owner::give($user, $task);
if (Owner::check($user, $task)) {
Log::info("Користувач {$user->id} є власником задачі {$task->id}");
}
$newOwner = User::find(1);
Owner::transfer($user, $newOwner, $task);
Log::info("Задача {$task->id} тепер належить {$task->currentOwner()->name}");
Ще однією корисною функцією пакету є наявність міграції, яка допомагає відстежувати зміни у праві власності на ваші моделі. Записи у вашій базі даних виглядають приблизно так:
Дізнайтеся більше про цей пакет та перегляньте вихідний код на GitHub