Политики Laravel не работают. Ошибка 403
Я пишу приложение на laravel и vue. Я сделал аутентификацию на sanctum и breeze. Она работает. Я хотел авторизовать действия пользователя, чтобы он мог создавать контент на сайте, если у него есть соответствующая роль. Я написал политику:
class NftPolicy
{
public function create(User $user): bool
{
// return $user->role === 'admin' || $user->role === 'author';
return true;
}
Зарегистрировал ее в App Service Provider в boot (как написано в документации):
class AppServiceProvider extends ServiceProvider
{
public function register(): void
{
//
}
public function boot(): void
{
Gate::policy(Nft::class, NftPolicy::class);
ResetPassword::createUrlUsing(function (object $notifiable, string $token) {
return config('app.frontend_url')."/password-reset/$token?email={$notifiable->getEmailForPasswordReset()}";
});
}
}
Я попробовал использовать ее в контроллере (не обращайте внимания на текущий код в нем, я перепробовал много вариантов, все равно ничего не получилось):
class StoreNftController extends Controller
{
public function __invoke(StoreRequest $request)
{
if (Gate::denies('create', Nft::class)) {
abort(403, 'Unauthorized action.');
}
// Gate::authorize('create', Nft::class);
$data = $request->validated();
$data['author_id'] = auth()->id();
$nft = Nft::create($data);
return response()->json($nft, 201);
}
}
api.php:
Route::group(['namespace' => 'App\Http\Controllers\Home', 'prefix' => 'home'], function(){
Route::post('/', StoreNftController::class)->middleware('auth:sanctum');
Я всегда получаю сообщение об ошибке 403, когда пытаюсь выполнить какое-либо действие. Независимо от того, как я что-то меняю, ошибка все равно остается. Хотя я проверил, что пользователь аутентифицирован, он попадает на клиент с сервера и если попытаться вывести его в laravel.log, данные будут там (все данные пользователя, аутентифицирован ли он и id сессии), но все равно ошибка постоянная.
Также я заметил, что логирование в контроллере не работает, то есть его код как будто даже не начинает выполняться, да и ошибка, по-моему, была еще когда у меня политик не было.
Я видел у некоторых людей решения, что нужно поместить политику в папку с моделями, в более старой версии laravel политики регают в AuthServiceProvider, но в версии 11 такого нет. Возможно, я где-то что-то не дописал... Я надеюсь на помощь.