Атрибут Authorize⚓︎
Атрибут #[Authorize] интегрирует систему Gate из Laravel напрямую в ваши действия Livewire. Он гарантирует, что действие будет выполнено только в том случае, если у пользователя есть необходимые разрешения, в противном случае выбрасывая ответ 403 Forbidden.
Базовое использование⚓︎
Примените атрибут #[Authorize] к любому методу действия. Передайте название возможности и необязательный аргумент:
<?php
use Livewire\Attributes\Authorize;
use Livewire\Component;
use App\Models\Post;
new class extends Component {
public Post $post;
#[Authorize('update', 'post')]
public function save()
{
$this->post->save();
}
};
При вызове save() Livewire автоматически проверяет, авторизован ли текущий пользователь для выполнения update модели $post, сохранённой в компоненте.
Разрешение аргументов⚓︎
Атрибут разрешает объект для проверки авторизации в следующем порядке:
- Без аргумента — проверяет простую возможность, не требующую модели (например,
#[Authorize('view-dashboard')]). - Строка класса — полезно для разрешений
create, когда экземпляр ещё не существует (например,#[Authorize('create', Post::class)]). - Параметр метода — разрешает аргумент из собственных параметров метода.
- Свойство компонента — ищет свойство в компоненте, соответствующее имени аргумента (например,
public Post $post).
Разрешение из параметров метода⚓︎
При авторизации на основе параметра метода вы должны указать тип параметра, чтобы Livewire знал, какую модель разрешить:
<?php
use Livewire\Attributes\Authorize;
use Livewire\Component;
use App\Models\Comment;
new class extends Component {
#[Authorize('delete', 'comment')]
public function deleteComment(Comment $comment)
{
$comment->delete();
}
};
Примечание
Если модель разрешается через параметр метода, требуется указание типа (например, Comment $comment). Без него Livewire не сможет определить, какую модель разрешить, и проверка авторизации завершится неудачей.
Дополнительный контекст⚓︎
При авторизации действий с помощью политик вы можете передать массив в качестве второго аргумента. Первый элемент массива будет использоваться для определения, какую политику следует вызвать, а остальные элементы массива будут переданы как параметры в метод политики.
<?php
use Livewire\Attributes\Authorize;
use Livewire\Component;
use App\Models\Comment;
use App\Models\Post;
new class extends Component {
public Post $post;
#[Authorize('create', [Comment::class, 'post'])]
public function createComment()
{
$this->post->comments()->create([
'body' => 'Новый комментарий'
]);
}
};
Множественные проверки⚓︎
Атрибут можно использовать многократно, что позволяет применять несколько проверок авторизации к одному методу:
<?php
#[Authorize('create', Post::class)]
#[Authorize('update', 'post')]
public function save()
{
// Обе проверки должны пройти успешно...
}
Когда НЕ стоит использовать⚓︎
Предупреждение
Атрибут #[Authorize] защищает только выполнение действия на стороне сервера. Он не скрывает элементы интерфейса в вашем Blade-шаблоне.
Для скрытия кнопок, которые пользователь не может использовать, следует использовать директивы @can в Blade:
Подробнее⚓︎
Для получения дополнительной информации об определении возможностей и политик см. документацию Laravel по авторизации.