Суть проста: у меня есть метод UserPolicy, который проверяет, хочет ли пользователь редактировать свой собственный профиль.Итак, я сделал так:
public function update(User $user, User $model)
{
return $user->id === $model->id;
}
И это вызывается в UserController следующим образом:
public function edit(User $user)
{
$this->authorize('update', $user);
return view('users.edit')->with('user', $user);
}
Все то же самое в PostController и PostPolicy, предназначено для проверки, еслипользователь может редактировать свой собственный пост, и это работает.Единственное различие заключается в их подписи, поскольку у одного есть два пользователя (первый - текущий аутентифицированный пользователь, введенный Laravel, а другой - экземпляр, с которым я хочу это проверить), а другой имеет вышеупомянутого автоматически введенного аутентифицированного пользователя ипочтовый экземпляр.Во всяком случае, выдает:
Symfony \ Component \ HttpKernel \ Exception \ AccessDeniedHttpException
This action is unauthorized.
Я пытался dd($model)
, но я получил то же исключение.Зачем?Заранее спасибо!
РЕДАКТИРОВАТЬ
В моем AuthServiceProvider тоже все настроено:
protected $policies = [
// 'App\Model' => 'App\Policies\ModelPolicy',
Post::class => PostPolicy::class,
User::class => UserPolicy::class,
];
И так же мой route.php:
// Authentication Routes...
$this->post('login', 'Auth\LoginController@login')->name('login');
$this->post('logout', 'Auth\LoginController@logout')->name('logout');
// Registration Routes...
$this->post('register', 'Auth\RegisterController@register')->name('register');
// Password Reset Routes...
$this->get('password/reset', 'Auth\ForgotPasswordController@showLinkRequestForm')->name('password.request');
$this->post('password/email', 'Auth\ForgotPasswordController@sendResetLinkEmail')->name('password.email');
$this->get('password/reset/{token}', 'Auth\ResetPasswordController@showResetForm')->name('password.reset');
$this->post('password/reset', 'Auth\ResetPasswordController@reset');
Route::get('/', 'HomeController@index')->name('home');
Route::resource('posts', 'PostController');
Route::resource('users', 'UserController')->except('index', 'create', 'store');
Все вышеперечисленное называется именно здесь:
@if ($user->id == Auth::id())
<a class="btn btn-link float-right p-0"
href="{{ route('users.edit', Auth::id()) }}">
<i class="fas fa-cog"></i>
Edit profile
</a>
<br><br><br>
@endif