🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

1回答

2941閲覧

”403 This action is unauthorized.”

YukiTani

総合スコア19

Laravel

LaravelとはTaylor Otwellによって開発された、オープンソースなPHPフレームワークです。Laravelはシンプルで表現的なシンタックスを持ち合わせており、ウェブアプリケーション開発の手助けをしてくれます。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

0クリップ

投稿2021/03/17 02:33

編集2021/03/17 04:59

前提・実現したいこと

投稿者と管理者だけが投稿記事の編集と削除機能を可能にしたところ、編集ページに遷移できなくなりました。(削除はできます。)
”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

参考記事

https://qiita.com/sutara79/items/11d8417a6fc91ca1b841

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lulucom

2021/03/17 04:08

どこのコードによりそのポリシーのeditが使われていますか?そのコードも掲載しないと回答が難しいと思います。
Lulucom

2021/03/17 04:56

PostsController@editのルートの定義も掲載をお願いします。
guest

回答1

0

ベストアンサー

editアクションを以下のように変更するとどうでしょうか。

php

1 public function edit($id) 2 { 3 $post = Post::findOrFail($id); 4 $this->authorize('edit', $post); 5 return view('bbs.edit', ['post' => $post]); 6 }

投稿2021/03/17 04:59

Lulucom

総合スコア1899

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YukiTani

2021/03/17 05:40

投稿の編集なので引数を"$user_id"ではなく、"$id"ですね。updateもuser_idにしていたので、$idに変更しました。ありがとうございました。
Lulucom

2021/03/17 05:57 編集

いいえ、掲載されたコードでは edit(Post $post, $post_id) となっていますが、$post_id で id の値を受け取れていて、$post は null になっていたのでしょう。authorize メソッドに null の $post を渡していたため、ポリシーに null が渡っていたのだと思います。 改善後のコードでは、$idで受け取ったidでPostを取得して$postに入れています。 解決してよかったです^ ^
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.36%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問