Команда make:policy
Команда make:policy создаёт новый класс политик в директории
app/Policies. Политики используются для организации логики
авторизации действий пользователей над моделями. По умолчанию
класс создаётся с пустыми методами, но можно использовать опцию
--model для автоматической генерации методов CRUD.
Первый параметр команды - имя класса политики.
Синтаксис
php artisan make:policy {name}
Пример
Давайте создадим политику для модели Article:
php artisan make:policy ArticlePolicy
Результат выполнения кода:
"Policy created successfully."
Пример
Создадим политику с автоматической генерацией методов для модели:
php artisan make:policy UserPolicy --model=User
Результат выполнения кода:
"Policy created successfully."
Пример сгенерированного класса
После выполнения команды с опцией --model,
создаётся класс с методами для CRUD операций:
<?php
namespace App\Policies;
use App\Models\User;
use App\Models\Article;
class ArticlePolicy
{
public function viewAny(User $user)
{
//
}
public function view(User $user, Article $article)
{
//
}
public function create(User $user)
{
//
}
public function update(User $user, Article $article)
{
//
}
public function delete(User $user, Article $article)
{
//
}
public function restore(User $user, Article $article)
{
//
}
public function forceDelete(User $user, Article $article)
{
//
}
}
?>
Пример регистрации политики
После создания политики её необходимо зарегистрировать в провайдере авторизации:
<?php
namespace App\Providers;
use App\Models\Article;
use App\Policies\ArticlePolicy;
use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
class AuthServiceProvider extends ServiceProvider
{
protected $policies = [
Article::class => ArticlePolicy::class,
];
public function boot()
{
$this->registerPolicies();
}
}
?>
Пример использования политики
Теперь можно использовать политику в контроллере для проверки прав:
<?php
namespace App\Http\Controllers;
use App\Models\Article;
use Illuminate\Http\Request;
class ArticleController extends Controller
{
public function update(Request $request, Article $article)
{
$this->authorize('update', $article);
$article->update($request->all());
return redirect()->route('articles.index');
}
}
?>
Смотрите также
-
команда
make:model,
которая создаёт новую модель Eloquent -
команда
make:controller,
которая создаёт новый контроллер -
команда
make:request,
которая создаёт класс запроса для валидации -
команда
make:middleware,
которая создаёт новый middleware-класс