Filament використовує політики моделей Laravel. Якщо для моделі ресурсу зареєстровано політику, Filament перевіряє її методи:
viewAny()- чи бачить користувач ресурс узагалі: без нього ресурс зникає з навігації, а сторінки віддають 403.view(),create(),update(),delete()- доступ до перегляду, створення, редагування й видалення конкретного запису.deleteAny(),forceDeleteAny(),restoreAny()- масові операції. Filament за замовчуванням не перевіряєdelete()для кожного запису окремо - це повільно. Якщо потрібно, у масової дії є->authorizeIndividualRecords().reorder()- зміна порядку рядків у таблиці.
class PostPolicy
{
public function viewAny(User $user): bool
{
return $user->hasRole('editor');
}
public function update(User $user, Post $post): bool
{
return $user->isAdmin() || $post->author_id === $user->id;
}
}
Що варто знати:
- Немає політики - немає обмежень: якщо політику не зареєстровано, Filament дозволяє все. Тому політика для кожної моделі в панелі - обов'язкова звичка.
- Перевірки повторюються на кожному Livewire-запиті, а не лише при відкритті сторінки: якщо доступ відібрали, наступна дія вже буде заборонена.
- Доступ до панелі визначає
canAccessPanel()на моделі користувача (інтерфейсFilamentUser). Без нього на проді в панель не пустить нікого. - Власні дії й сторінки політики ресурсу автоматично не покривають - їм потрібні
->authorize()чиcanAccess(). - Обмеження видимих рядків (редактор бачить лише свої пости) - через
getEloquentQuery()ресурсу, а не лише через політику.