Компоненты

Вы просматриваете документацию старой версии MoonShine. Рассмотрите возможность обновления вашего проекта до MoonShine 2.x.

# Основы

Для расширения возможностей можно добавлять собственные компоненты на основе абстрактных классов MoonShine\IndexComponent, MoonShine\FormComponent или MoonShine\DetailComponent, они будут отображаться под основной формой или под детальной информацией соответственно

Все кастомные компоненты необходимо зарегистрировать в методе components()

namespace MoonShine\Resources;
 
class ArticleResource extends Resource
{
//...
 
public function components(): array
{
return [
// ...
];
}
 
//...
}

# Разрешения

Пример добавления компонента PermissionFormComponent

namespace MoonShine\Resources;
 
use MoonShine\FormComponents\PermissionFormComponent;
use MoonShine\Models\MoonshineUserRole;
use MoonShine\Resources\Resource;
 
class MoonShineUserResource extends Resource
{
//...
 
public function components(): array
{
return [
PermissionFormComponent::make('Permissions')
->canSee(fn() => auth()->user()->moonshine_user_role_id === MoonshineUserRole::DEFAULT_ROLE_ID)
];
}
 
//...
}

Если вы используете свою модель для аутентификации, то вам нужно добавить в нее трейт MoonShine\Traits\Models\HasMoonShinePermissions

Если вы используете свой ресурс с выводом администраторов, необходимо ресурсу добавить трейт MoonShine\Traits\Resource\WithUserPermissions

# История изменений

Чтобы в админ-панели отображалась история редактирования записей на основе пользователя, необходимо модели, которая используется в ресурсе, добавить трейт MoonShine\Traits\Models\HasMoonShineChangeLog

namespace App\Models;
 
use Illuminate\Database\Eloquent\Model;
use MoonShine\Traits\Models\HasMoonShineChangeLog;
 
class Article extends Model
{
use HasMoonShineChangeLog;
 
//...
}

А также добавить компонент в ресурсе ChangeLogFormComponent

namespace MoonShine\Resources;
 
use MoonShine\FormComponents\ChangeLogFormComponent;
use MoonShine\Models\MoonshineUserRole;
use MoonShine\Resources\Resource;
 
class ArticleResource extends Resource
{
// ...
public function components(): array
{
return [
ChangeLogFormComponent::make('Change log')
->canSee(fn() => auth()->user()->moonshine_user_role_id === MoonshineUserRole::DEFAULT_ROLE_ID),
];
}
// ...
}