前提・実現したいこと
投稿者と管理者だけが投稿記事の編集と削除機能を可能にしたところ、編集ページに遷移できなくなりました。(削除はできます。)
”403 This action is unauthorized.”と表示され編集ページへ移動することが出来ません。
2行目がnullのため、ページへ遷移出来ないと考えているので、postfactoryにuser_idの値が入るようにしましたが、nullのままです。
書き換えた後、php artisan migrate:refresh、php artisan db:seedをしても解決できませんでした。
発生している問題・エラーメッセージ
”403 This action is unauthorized.”
該当のソースコード
PostFactory.php
php
1$factory->define(Post::class, function (Faker $faker) { 2 return [ 3 'created_at' => $faker->date('Y-m-d H:i:s', 'now'), 4 'updated_at' => $faker->date('Y-m-d H:i:s', 'now'), 5 'subject' => $faker->realText(16), 6 'message' => $faker->realText(200), 7 'name' => $faker->name, 8 'user_id' => factory(App\User::class), 9 ]; 10}); 11
PostPolicy.php
php
1 /** 2 * 編集と削除の認可の判断 3 * 4 * @param \App\User $user 現在ログインしているユーザ 5 * @param \App\Post $post 現在表示している投稿 6 * @return mixed 7 */ 8 public function edit(User $user, Post $post) 9 { 10 dump($user->id); 11 dd($post->user_id); //デバッグ中 12 return $user->id === $post->user_id; 13 #return $user->id == $post->user_id; 14 } 15 16 public function update(User $user, Post $post) 17 { 18 return $user->id === $post->user_id; 19 }
PostsController.php
php
1 2 /** 3 * 編集フォーム 4 */ 5 public function edit(Post $post, $post_id) 6 { 7 $user = auth()->user(); 8 $this->authorize('edit', $post); 9 $post = Post::findOrFail($post_id); 10 return view('bbs.edit',['post' => $post]); 11 }
index.blade.php
php
1 <td class="text-nowrap"> 2 <p><a href="{{ action('PostsController@show', $post->id) }}" class="btn btn-primary btn-sm">詳細</a></p> 3 @can('edit', $post) #ここに使用しています。 4 <p><a href="{{ action('PostsController@edit', $post->id) }}" class="btn btn-info btn-sm">編集</a></p> 5 <p> 6 <form method="POST" action="{{ action('PostsController@destroy', $post->id) }}"> 7 @csrf 8 @method('DELETE') 9 <button class="btn btn-danger btn-sm">削除</button> 10 </form> 11 </p> 12 @endcan 13 </td>
web.php
php
1Route::group(['middleware' => 'auth'], function() { 2 Route::get('/post/index', 'PostsController@index')->name('bbs.index'); 3 Route::post('/user/logout', 'UserController@logout')->name('user.logout'); 4 Route::resource('user', 'UserController', ['only' => ['index', 'edit', 'update', 'destroy']]); 5 Route::resource('bbs', 'PostsController', ['only' => ['index', 'show', 'create', 'store', 'edit', 'update', 'destroy']]); 6 Route::resource('comment', 'CommentsController', ['only' => ['store']]); 7});
route
php
1+--------+-----------+------------------+---------------+-----------------------------------------------+--------------+ 2| Domain | Method | URI | Name | Action | Middleware | 3+--------+-----------+------------------+---------------+-----------------------------------------------+--------------+ 4| | GET|HEAD | / | user.signin | App\Http\Controllers\UserController@signin | web,guest | 5| | GET|HEAD | api/user | | Closure | api,auth:api | 6| | POST | bbs | bbs.store | App\Http\Controllers\PostsController@store | web,auth | 7| | GET|HEAD | bbs | bbs.index | App\Http\Controllers\PostsController@index | web,auth | 8| | GET|HEAD | bbs/create | bbs.create | App\Http\Controllers\PostsController@create | web,auth | 9| | DELETE | bbs/{bb} | bbs.destroy | App\Http\Controllers\PostsController@destroy | web,auth | 10| | PUT|PATCH | bbs/{bb} | bbs.update | App\Http\Controllers\PostsController@update | web,auth | 11| | GET|HEAD | bbs/{bb} | bbs.show | App\Http\Controllers\PostsController@show | web,auth | 12| | GET|HEAD | bbs/{bb}/edit | bbs.edit | App\Http\Controllers\PostsController@edit | web,auth | 13| | POST | comment | comment.store | App\Http\Controllers\CommentsController@store | web,auth | 14| | GET|HEAD | post/index | bbs.index | App\Http\Controllers\PostsController@index | web,auth | 15| | GET|HEAD | user | user.index | App\Http\Controllers\UserController@index | web,auth | 16| | POST | user | user.store | App\Http\Controllers\UserController@store | web,guest | 17| | GET|HEAD | user/create | user.create | App\Http\Controllers\UserController@create | web,guest | 18| | POST | user/login | user.login | App\Http\Controllers\UserController@login | web,guest | 19| | POST | user/logout | user.logout | App\Http\Controllers\UserController@logout | web,auth | 20| | DELETE | user/{user} | user.destroy | App\Http\Controllers\UserController@destroy | web,auth | 21| | PUT|PATCH | user/{user} | user.update | App\Http\Controllers\UserController@update | web,auth | 22| | GET|HEAD | user/{user}/edit | user.edit | App\Http\Controllers\UserController@edit | web,auth | 23+--------+-----------+------------------+---------------+-----------------------------------------------+--------------+
補足情報(FW/ツールのバージョンなど)
Laravel Framework 5.8.38
mac OS Catalina 10.15.7
参考記事
回答1件
あなたの回答
tips
プレビュー