<? phpukraine ДОКУМЕНТАЦІЯ
⌕Пошук по платформі
Документація українською

Переклад офіційної документації українською. Кожен розділ показує стан готовності: недоперекладене позначене відкрито, а не приховане.

ВЕРСІЯ
АКТУАЛЬНА Актуальний реліз. Переклад наздоганяє оригінал, розділи з низьким відсотком позначені у змісті.
КОРИСТУВАЧІ Й ТЕСТИ · ПЕРЕКЛАДЕНО оновлено 23 вересня 2026

Користувачі · Filament

За замовчуванням усі App\Models\User мають доступ до Filament локально. Щоб дозволити їм доступ до Filament у продакшені, потрібно зробити кілька додаткових кроків і переконатися, що доступ до застосунку отримають лише потрібні користувачі.

Авторизація доступу до панелі

Щоб налаштувати App\Models\User для доступу до Filament у нелокальних середовищах, реалізуйте контракт FilamentUser:

<?php

namespace App\Models;

use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements FilamentUser
{
    // ...

    public function canAccessPanel(Panel $panel): bool
    {
        return str_ends_with($this->email, '@yourdomain.com') && $this->hasVerifiedEmail();
    }
}

Метод canAccessPanel() повертає true або false залежно від того, чи дозволено користувачеві доступ до $panel. У цьому прикладі ми перевіряємо, чи закінчується email користувача на @yourdomain.com і чи підтверджено його адресу.

Оскільки поточна $panel доступна всередині методу, ви можете писати умовні перевірки для окремих панелей. Наприклад, обмежити доступ лише до адмінпанелі, дозволивши всім користувачам доступ до інших панелей застосунку:

<?php

namespace App\Models;

use Filament\Models\Contracts\FilamentUser;
use Filament\Panel;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements FilamentUser
{
    // ...

    public function canAccessPanel(Panel $panel): bool
    {
        if ($panel->getId() === 'admin') {
            return str_ends_with($this->email, '@yourdomain.com') && $this->hasVerifiedEmail();
        }

        return true;
    }
}

Авторизація доступу до ресурсів

Керування доступом до сторінок ресурсу (resource) і до його записів описано в розділі Authorization документації ресурсів.

Налаштування аватарів користувачів

З коробки Filament використовує ui-avatars.com для генерації аватарів на основі імені користувача. Якщо ж модель користувача має атрибут avatar_url, використовуватиметься він. Щоб змінити те, як Filament отримує URL аватара, реалізуйте контракт HasAvatar:

<?php

namespace App\Models;

use Filament\Models\Contracts\FilamentUser;
use Filament\Models\Contracts\HasAvatar;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements FilamentUser, HasAvatar
{
    // ...

    public function getFilamentAvatarUrl(): ?string
    {
        return $this->avatar_url;
    }
}

Метод getFilamentAvatarUrl() використовується для отримання аватара поточного користувача. Якщо метод поверне null, Filament повернеться до ui-avatars.com.

Використання іншого провайдера аватарів

Замінити ui-avatars.com на інший сервіс легко: достатньо створити новий провайдер аватарів.

У цьому прикладі ми створюємо новий файл app/Filament/AvatarProviders/BoringAvatarsProvider.php для boringavatars.com. Метод get() приймає екземпляр моделі користувача й повертає URL аватара для цього користувача:

<?php

namespace App\Filament\AvatarProviders;

use Filament\AvatarProviders\Contracts;
use Filament\Facades\Filament;
use Illuminate\Contracts\Auth\Authenticatable;
use Illuminate\Database\Eloquent\Model;

class BoringAvatarsProvider implements Contracts\AvatarProvider
{
    public function get(Model | Authenticatable $record): string
    {
        $name = str(Filament::getNameForDefaultAvatar($record))
            ->trim()
            ->explode(' ')
            ->map(fn (string $segment): string => filled($segment) ? mb_substr($segment, 0, 1) : '')
            ->join(' ');

        return 'https://source.boringavatars.com/beam/120/' . urlencode($name);
    }
}

Тепер зареєструйте цей новий провайдер аватарів у конфігурації:

use App\Filament\AvatarProviders\BoringAvatarsProvider;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->defaultAvatarProvider(BoringAvatarsProvider::class);
}

Налаштування атрибута з іменем користувача

За замовчуванням Filament бере атрибут name користувача, щоб показати його імʼя в застосунку. Щоб змінити це, реалізуйте контракт HasName:

<?php

namespace App\Models;

use Filament\Models\Contracts\FilamentUser;
use Filament\Models\Contracts\HasName;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable implements FilamentUser, HasName
{
    // ...

    public function getFilamentName(): string
    {
        return "{$this->first_name} {$this->last_name}";
    }
}

Метод getFilamentName() використовується для отримання імені поточного користувача.

Можливості автентифікації

Увімкнути можливості автентифікації для панелі можна у файлі конфігурації:

use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->login()
        ->registration()
        ->passwordReset()
        ->emailVerification()
        ->emailChangeVerification()
        ->profile();
}

Filament також підтримує багатофакторну автентифікацію, про яку можна почитати в розділі Multi-factor authentication.

Налаштування можливостей автентифікації

Якщо ви хочете замінити ці сторінки власними, передайте в ці методи будь-який клас сторінки Filament.

Більшості вистачить розширити базовий клас сторінки з кодової бази Filament, перевизначити методи на кшталт form() і передати новий клас сторінки в конфігурацію:

use App\Filament\Pages\Auth\EditProfile;
use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->profile(EditProfile::class);
}

У цьому прикладі ми налаштуємо сторінку профілю. Треба створити новий PHP-клас у файлі app/Filament/Pages/Auth/EditProfile.php:

<?php

namespace App\Filament\Pages\Auth;

use Filament\Auth\Pages\EditProfile as BaseEditProfile;
use Filament\Forms\Components\TextInput;
use Filament\Schemas\Schema;

class EditProfile extends BaseEditProfile
{
    public function form(Schema $schema): Schema
    {
        return $schema
            ->components([
                TextInput::make('username')
                    ->required()
                    ->maxLength(255),
                $this->getNameFormComponent(),
                $this->getEmailFormComponent(),
                $this->getPasswordFormComponent(),
                $this->getPasswordConfirmationFormComponent(),
            ]);
    }
}

Цей клас розширює базовий клас сторінки профілю з кодової бази Filament. Серед інших класів сторінок, які можна розширити:

  • Filament\Auth\Pages\Login
  • Filament\Auth\Pages\Register
  • Filament\Auth\Pages\EmailVerification\EmailVerificationPrompt
  • Filament\Auth\Pages\PasswordReset\RequestPasswordReset
  • Filament\Auth\Pages\PasswordReset\ResetPassword

У методі form() з прикладу ми викликаємо методи на кшталт getNameFormComponent(), щоб отримати стандартні компоненти форми для сторінки. Ці компоненти можна налаштувати як завгодно. Повний перелік опцій налаштування дивіться в базовому класі сторінки EditProfile у кодовій базі Filament: там зібрані всі методи, які можна перевизначити для внесення змін.

Налаштування поля автентифікації без перевизначення форми

Якщо потрібно налаштувати поле у формі автентифікації, не описуючи новий метод form(), розширте метод конкретного поля і додайте свої налаштування ланцюжком:

use Filament\Schemas\Components\Component;

protected function getPasswordFormComponent(): Component
{
    return parent::getPasswordFormComponent()
        ->revealable(false);
}

Підтвердження зміни email

Якщо ви використовуєте можливість profile() разом із emailChangeVerification(), користувачі, які змінюють свою email-адресу у формі профілю, муситимуть підтвердити нову адресу, перш ніж зможуть увійти з нею. Для цього на нову адресу надсилається лист із посиланням, яке користувач має відкрити, щоб підтвердити нову адресу. Адреса в базі даних не оновлюється, доки користувач не перейде за посиланням із листа.

Посилання, яке отримує користувач, дійсне 60 хвилин. Одночасно з листом на нову адресу надсилається лист і на стару, з посиланням для блокування зміни. Це захисний механізм, який може вберегти користувача від дій зловмисника.

Використання бічної панелі на сторінці профілю

За замовчуванням сторінка профілю не використовує стандартний макет сторінки з бічною панеллю. Так зроблено, щоб вона працювала з можливістю tenancy: інакше вона була б недоступною для користувача без тенантів, адже посилання в бічній панелі ведуть до поточного тенанта.

Якщо ви не використовуєте tenancy у своїй панелі й хочете, щоб сторінка профілю мала стандартний макет із бічною панеллю, передайте параметр isSimple: false у $panel->profile() під час реєстрації сторінки:

use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->profile(isSimple: false);
}

Налаштування слагів маршрутів автентифікації

Слаги URL для маршрутів автентифікації можна змінити в конфігурації:

use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->loginRouteSlug('login')
        ->registrationRouteSlug('register')
        ->passwordResetRoutePrefix('password-reset')
        ->passwordResetRequestRouteSlug('request')
        ->passwordResetRouteSlug('reset')
        ->emailVerificationRoutePrefix('email-verification')
        ->emailVerificationPromptRouteSlug('prompt')
        ->emailVerificationRouteSlug('verify')
        ->emailChangeVerificationRoutePrefix('email-change-verification')
        ->emailChangeVerificationRouteSlug('verify');
}

Встановлення guard автентифікації

Щоб задати guard автентифікації, який використовує Filament, передайте імʼя guard у метод конфігурації authGuard():

use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->authGuard('web');
}

Встановлення password broker

Щоб задати password broker, який використовує Filament, передайте імʼя брокера в метод конфігурації authPasswordBroker():

use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->authPasswordBroker('users');
}

Вимкнення показу пароля в полях вводу

За замовчуванням усі поля паролів у формах автентифікації мають revealable(). Це дозволяє користувачеві побачити пароль, який він вводить, у вигляді звичайного тексту, натиснувши кнопку. Щоб вимкнути цю можливість, передайте false у метод конфігурації revealablePasswords():

use Filament\Panel;

public function panel(Panel $panel): Panel
{
    return $panel
        // ...
        ->revealablePasswords(false);
}

Можна також вимикати її для окремого поля, викликавши ->revealable(false) на обʼєкті поля під час розширення базового класу сторінки.

Налаштування гостьового доступу до панелі

За замовчуванням Filament розрахований на роботу лише з автентифікованими користувачами. Щоб дозволити гостям доступ до панелі, треба відмовитися від компонентів, які очікують на залогіненого користувача (профілі, аватари), і прибрати вбудований middleware автентифікації:

  • Приберіть стандартний Authenticate::class із масиву authMiddleware() у конфігурації панелі.
  • Приберіть ->login() та інші можливості автентифікації з панелі.
  • Приберіть стандартний AccountWidget із масиву widgets(), бо він читає дані поточного користувача.

Авторизація гостей у політиках

Якщо політики присутні, Filament покладається на Laravel Model Policies для контролю доступу. Щоб надати доступ на читання гостьовим користувачам у політиці моделі, створіть політику й оновіть методи viewAny() та view(): змініть параметр User $user на ?User $user, щоб він став необовʼязковим, і додайте return true;. Як варіант, ці методи можна прибрати з політики взагалі.

Стан перекладу

Перекладаємо з офіційної документації, розділ за розділом, і не ховаємо недоперекладене. Помітили неточність у терміні чи реченні: напишіть, виправимо.

47%
Готовності
0
У роботі
17
Ще не перекладено
Глосарій термінів