Функция authorize
Функция authorize предназначена для авторизации действий пользователя в приложении Laravel. Она проверяет, имеет ли текущий пользователь право на выполнение указанного действия. Если авторизация не пройдена, функция выбрасывает исключение AuthorizationException. Первым параметром передается имя действия или способность (ability), вторым - модель или параметры для проверки.
Синтаксис
<?php
authorize($ability, $arguments);
?>
Пример
Проверим, может ли пользователь обновить статью:
<?php
namespace AppHttpControllers;
use AppModelsArticle;
class ArticleController extends Controller
{
public function update($id)
{
$article = Article::findOrFail($id);
authorize('update', $article);
// Логика обновления статьи
}
}
?>
Если у пользователя нет прав на обновление статьи, будет выброшено исключение и код после функции не выполнится.
Пример
Использование функции authorize в контроллере с передачей нескольких параметров:
<?php
namespace AppHttpControllers;
use AppModelsPost;
use AppModelsCategory;
class PostController extends Controller
{
public function store($categoryId)
{
$category = Category::findOrFail($categoryId);
authorize('create', [Post::class, $category]);
// Логика создания поста
}
}
?>
Вторым параметром можно передать массив, где первый элемент - класс модели, а второй - дополнительный объект для проверки.
Пример
Обработка исключения, выбрасываемого функцией authorize:
<?php
namespace AppHttpControllers;
use IlluminateAuthAccessAuthorizationException;
class DashboardController extends Controller
{
public function adminPanel()
{
try {
authorize('view-admin-panel');
// Код для административной панели
echo "Admin panel content";
} catch (AuthorizationException $e) {
echo "You don't have permission to view this page";
}
}
}
?>
Результат выполнения кода для пользователя без прав:
"You don't have permission to view this page"
Пример
Использование authorize с проверкой нескольких способностей:
<?php
namespace AppHttpControllers;
use AppModelsComment;
class CommentController extends Controller
{
public function moderate($id)
{
$comment = Comment::findOrFail($id);
authorize(['update', 'delete'], $comment);
// Логика модерации комментария
}
}
?>
Функция проверит, есть ли у пользователя хотя бы одна из указанных способностей.