У меня есть очень простое обучающее приложение. Моя версия Laravel — 5.5.13
. User
может создать Pet
. Я неявно выбрасываю 404
, но мне также нужно неявно выбрасывать 401
возможно ли это?
Подробности по настройке:
Pet
модель:
class Pet extends Model
{
protected $fillable = ['name', 'user_id'];
public function user()
{
return $this->belongsTo('App\User');
}
}
И модель User
, дающая отношение hasMany
:
class User extends Authenticatable
{
use Notifiable;
// ... some stuff hidden for brevity
public function pets()
{
return $this->hasMany('App\Pet');
}
}
Я использовал неявную привязку модели маршрута, чтобы выдать статус 404
, когда идентификатор не найден, например:
Route::group(['middleware' => 'auth:api'], function() {
Route::get('pets', 'PetController@index');
Route::get('pets/{pet}', 'PetController@show');
Route::post('pets', 'PetController@store');
Route::put('pets/{pet}', 'PetController@update');
Route::delete('pets/{pet}', 'PetController@delete');
});
Обратите внимание на {pet}
вместо {id}
.
Однако я также хочу выдать 401
неавторизованный статус, если $pet->user_id
не равно Auth::guard('api')->user()->id
. Это неявно возможно?
Если это невозможно, не могли бы вы показать мне, как явно сделать это в контроллере? Я делал это, но я не думаю, что это рекомендуемый способ, не так ли?
public function show(Pet $pet)
{
if ($pet->user_id != Auth::guard('api')->user()->id) {
return response()->json(['message'=>'Not authenticated to view this pet'], 401);
}
return $pet;
}