Я хочу создать конечную точку API, которая дает мне определенный объект.Некоторые объекты являются общедоступными, некоторые могут быть просмотрены только владельцем этого объекта, пока они не опубликуют объект.
Route::get('jobs/{job}', 'JobController@find')->middleware('auth:api');
JobPolicy должен решить, что должно произойти:
public function view(User $user, Job $job)
{
if (!empty($user)) {
return $job->user_id === $user->id || $job->job_status_id !== 1;
}
return true;
}
Это работает, когда пользователь вошел в систему. Когда пользователь не вошел, это больше не работает.
Таким образом, ->middleware('auth:api')
предотвращает доступ к Политике, когда не вошел в систему.
Согласно этому вопросу и этому документу Я должен иметь возможность изменить метод представления в Политике с view(User $user, Job $job)
на view(?User $user, Job $job)
, чтобы иметьДостигнута политика даже для неаутентифицированных пользователей.
Проблема в том, что из-за ->middleware('auth:api')
он продолжает посылать меня на app\Exceptions\Handler.php
с ошибкой без аутентификации.
Ясно добавляя ? для JobPolicy - не единственное, что я должен делать.
Я использую PHP 7.2, Laravel 5.7 и Laravel Passport 7.2.0.