la
前提・実現したいこと
ここに質問の内容を詳しく書いてください。
laravelで編集画面で自分の投稿しているものだけに編集権限与えるようにしたいです
現在ログインしているidと,productのuser_idが一致しなかったらリダイレクトさせるようにしています
しかし、なぜか、usersのidとproductsのidが一致しているのに、なぜかトップページにリダイレクトしています。
発生している問題・エラーメッセージ
エラーメッセージ
該当のソースコード
productsController.php
<?php namespace App\Http\Controllers; use App\Product; use App\User; use Illuminate\Http\Request; use Illuminate\Support\Facades\Auth; use App\Http\Requests\ProductRequest; class ProductsController extends Controller { public function edit($id, Product $product) { // $this->authorize('update', $product); if(Auth::id() !== Product::where('user_id', $product->user_id)->get()) { return redirect()->route('products.index'); } else { $product = Product::find($id); return view('products.edit', [ 'product' => $product ]); } } /** * 指定したポストの更新 * * @param Request $request * @param Product $product * @return Response * @throws \Illuminate\Auth\Access\AuthorizationException */ public function update(ProductRequest $request, Product $product, int $id) { $this->authorize('update', $product); $product = Product::find($id); $product->title = $request->title; $product->review = $request->review; $product->price = $request->price; $product->url = $request->url; $product->user_id = $request->user()->id; $filename = $request->file('photo')->store('public'); $product->photo = str_replace('public', '', $filename); $product->save(); return redirect()->route('products.index'); } public function destroy($id) { $product = Product::find($id); $product->delete(); return redirect()->route('products.index'); } }
試したこと
試したことは,dd()でuserとprodcutのidを確認しました。情報は取得できていました。
あとは、 「policy」も使ってみましたが、ドキュメントにも書いてあることを試してみました!
403の権限がないよと出ていたので、処理は走っていると考えています。
public function update(User $user, Post $post) { return $user->id === $product->user_id; }
public function edit($id, Product $product) { $this->authorize('update', $product); $product = Product::find($id); return view('products.edit', [ 'product' => $product ]); }
うまく行かなかったのアドバイスをいただけると幸いです。
補足情報(FW/ツールのバージョンなど)
laravel6
php 7.3
hoemstead
virtualBox
vagrant
ここにより詳細な情報を記載してください。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/09 02:12
2020/08/09 02:23