Метод authorize
Метод authorize применяется в контроллерах Laravel для проверки авторизации пользователя перед выполнением действия. Первым параметром передаётся имя действия (метод политики), вторым - модель или идентификатор ресурса. Если проверка не пройдена, метод выбрасывает исключение AuthorizationException, которое автоматически обрабатывается Laravel и возвращает ответ с кодом 403. Метод удобно использовать в конструкторе или непосредственно в методах контроллера.
Синтаксис
<?php
$this->authorize($ability, $arguments);
?>
Параметры метода authorize:
$ability- строка, имя метода политики (например, 'view', 'update', 'delete');$arguments- модель, идентификатор или массив аргументов для политики.
Пример
Давайте проверим, может ли пользователь просматривать статью с id равным 1:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function show(Request $request, $id)
{
$article = Article::findOrFail($id);
$this->authorize('view', $article);
return view('article.show', ['article' => $article]);
}
}
?>
Результат выполнения кода:
"Article view rendered successfully"
Пример
Давайте проверим, может ли пользователь обновлять статью, используя идентификатор вместо модели:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function update(Request $request, $id)
{
$this->authorize('update', [Article::class, $id]);
$article = Article::findOrFail($id);
$article->update($request->all());
return redirect()->route('articles.index');
}
}
?>
Результат выполнения кода:
"Redirected to articles index"
Пример
Проверим авторизацию в конструкторе контроллера для всех методов, кроме указанных:
<?php
namespace App\Http\Controllers;
use App\Models\Post;
class PostController extends Controller
{
public function __construct()
{
$this->authorize('viewAny', Post::class);
}
public function index()
{
$posts = Post::all();
return view('posts.index', ['posts' => $posts]);
}
}
?>
Результат выполнения кода:
"Posts index view rendered successfully"
Пример
Используем метод authorize с несколькими аргументами для сложной проверки:
<?php
namespace App\Http\Controllers;
use App\Models\Comment;
use App\Models\Article;
class CommentController extends Controller
{
public function destroy($articleId, $commentId)
{
$article = Article::findOrFail($articleId);
$comment = Comment::findOrFail($commentId);
$this->authorize('delete', [$article, $comment]);
$comment->delete();
return redirect()->back();
}
}
?>
Результат выполнения кода:
"Redirected back to previous page"
Смотрите также
-
метод
middleware,
который назначает посредников на методы контроллера -
метод
validate,
который проверяет входящие данные запроса -
метод
user,
который получает текущего аутентифицированного пользователя -
класс
ValidateCsrfToken,
который проверяет CSRF-токен запроса