Политики в Laravel представляют собой мощный механизм для организации логики авторизации в вашем приложении. Они позволяют вам определить, какие действия может выполнять пользователь, основываясь на его атрибутах, таких как роль, права или другие условия. Политики Laravel предоставляют удобный способ централизованного управления правилами доступа, что делает код более чистым и легко поддерживаемым.

Создание Policy

Чтобы создать политику, используйте команду artisan make:policy в командной строке. Эта команда создаст новый класс политики в каталоге app/Policies.

php artisan make:policy PostPolicy

Это создаст файл PostPolicy.php в каталоге app/Policies. В этом файле вы можете определить методы, которые будут проверять, имеет ли пользователь право на выполнение определенных действий с моделью Post.

Определение методов Policy

Внутри класса политики вы можете определить методы, соответствующие различным действиям, которые пользователь может выполнять с моделью. Например, метод view может проверять, может ли пользователь просматривать пост.

namespace App\Policies;

use App\Models\Post;
use App\Models\User;

class PostPolicy
{
    public function view(User $user, Post $post)
    {
        // Проверяем, может ли пользователь просматривать пост
        return $user->id === $post->user_id;
    }
}

Регистрация Policy

Чтобы политика была доступна в приложении, ее нужно зарегистрировать. Это обычно делается в сервис-провайдере, например, в AuthServiceProvider.

namespace App\Providers;

use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider;
use App\Models\Post;
use App\Policies\PostPolicy;

class AuthServiceProvider extends ServiceProvider
{
    protected $policies = [
        Post::class => PostPolicy::class,
    ];

    public function boot()
    {
        $this->registerPolicies();
    }
}

Использование Policy

Теперь, когда политика зарегистрирована, вы можете использовать ее в контроллерах или маршрутах для проверки доступа.

public function show(Post $post)
{
    $this->authorize('view', $post);

    return view('post.show', compact('post'));
}

Использование политик в Laravel позволяет вам легко и эффективно управлять правилами доступа в вашем приложении, делая код более чистым и удобным для поддержки.