Documentation in English
Добавляет функцию блокировки ресурсов в административную панель MoonShine. Когда пользователь редактирует запись, ресурс блокируется, чтобы другие пользователи не могли одновременно вносить изменения.
Версия пакета | Версия админ-панели MoonShine |
---|---|
^1.x | ^2.18.0 |
^2.x | ^3.x |
- Установка
- Использование
- Конфигурация
- Отображение всех блокировок
- Публикация конфигурации и языковых файлов
- Лицензия
Команда для установки:
composer require forest-lynx/moonshine-resource-lock
Затем запустите команду установки:
php artisan resource-lock:install
Команда запустит миграции, и предложит опубликовать конфигурационный файл и языковые файлы.
Пакет resource-lock
позволяет заблокировать ресурс и предотвратить его редактирование другими пользователями.
Для активации блокировки ресурса необходимо добавить в ModelResource
трейт WithResourceLock
.
<?php
//...
use ForestLynx\MoonShine\Traits\WithResourceLock;
class PostResource extends ModelResource
{
use WithResourceLock;
//...
Теперь Ваш ресурс может быть заблокирован.
По умолчанию ресурс будет заблокирован на 10 минут, или до момента его сохранения, в зависимости от того что наступит раньше.
Время блокировки регулируется параметром lock_time
, который указан в конфигурационном файле, значение указывается в минутах.
По умолчанию в модальном окне выводится информация о пользователе, который заблокировал доступ к ресурсу.
За вывод информации о пользователе отвечает параметр show_owner_modal
(который по умолчанию имеет значение true
) в конфигурационном файле.
В модальном окне отображается только имя пользователя, заблокировавшего доступ к ресурсу. Для отображения иной информации вы можете создать свой класс, который будет унаследован от ResourceLockOwnerAction
, и зарегистрировать его в конфигурационном файле. Таким образом, вы сможете настроить отображение дополнительных сведений о заблокировавшем доступ пользователе в модальном окне.
Например:
<?php
namespace App\Actions;
use ForestLynx\ResourceLock\Actions\ResourceLockOwnerAction;
class CustomActions extends ResourceLockOwnerAction
{
public function execute(Model|Authenticatable $user): ?string
{
return $user->email;
}
}
Затем внести его в конфигурационный файл:
//...
-'resource_lock_owner' => \ForestLynx\MoonShine\Actions\ResourceLockOwnerAction::class
+'resource_lock_owner' => \App\Actions\CustomActions::class
//...
По умолчанию, когда вы нажимаете кнопку «Назад» в модальном окне заблокированного ресурса, происходит переход на индексную страницу ресурса. Однако вы можете изменить URL страницы редиректа, переопределив метод getReturnUrlResourceLock
в вашем ресурсе.
<?php
//...
class PostResource extends ModelResource
{
//...
use WithResourceLock;
//...
protected function getReturnUrlResourceLock(): string
{
return 'https://...';
}
//...
}
На индексной странице ресурса по умолчанию отображается информация о том, что доступ к ресурсу был заблокирован другим пользователем. Это отображается в виде специального значка:
Чтобы скрыть эту информацию на индексной странице ресурса, можно в конфигурационном файле установить для параметра resource_lock_to_index_page
значение false
.
В зависимости от ваших потребностей, вы можете настроить отображение информации о заблокированном ресурсе на индексной странице ресурса с помощью объявления метода в вашем ресурсе isDisplayOnIndexPage()
. Этот метод должен возвращать логическое значение true
или false
.
Например:
<?php
//...
class PostResource extends ModelResource
{
//...
use WithResourceLock;
//...
public function isDisplayOnIndexPage(): bool
{
return false;
}
//...
}
Caution
Пока это работает только для ресурсов с отображением через TableBuilder
.
Note
Чтобы предотвратить редактирование заблокированного ресурса, из списка действий удаляются кнопки редактирования и удаления на главной странице ресурса. Вместо них появляется кнопка, открывающая информацию о заблокированном ресурсе в модальном окне.
В этом пакете можно настроить отображение всех заблокированных ресурсов.
Название ресурса для использования в меню административной панели MoonShine:
ForestLynx\MoonShine\Resources\LockResource
.
Удаление записи приводит к разблокировке ресурса.
Чтобы узнать больше о доступных вариантах отображения, обратитесь к документации административной панели Moonshine Menu а так же ModelResource
Для очистки таблицы базы данных от всех устаревших записей о блокировке ресурсов запустите команду:
php artisan resource-lock:clear-old
Чтобы опубликовать конфигурационный файл запустите команду:
php artisan vendor:publish --tag=resource-lock-config
Подробнее о конфигурации пакета.
Для публикации языковых файлов запустите команду:
php artisan vendor:publish --tag=resource-lock-lang