初心者です。
laravelで認可処理を実装しています。
コントローラーでpolicyを呼び出すのをやめてルートでミドルウェアをかけたいです。
参考
https://readouble.com/laravel/6.x/ja/authorization.html
見やすくしたいのでrouteに下記のように書いのですが上手くいきません。
自分が認証されなくなってしまいます。
403権限エラーで弾かれてしまう状態です。
web
1Route::group(['middleware' => 'can:update,skiday'], function(){ 2 Route::get('/calendar/{skiday}/edit', 'CalendarController@edit')->name('calendar.edit'); 3 Route::post('/calendar/{skiday}/edit', 'CalendarController@update')->name('calendar.update'); 4});
policy
1use App\Skiday; 2use App\User; 3class SkidayPolicy 4{ 5 public function update(User $user, Skiday $skiday) 6 { 7 return $user->id === $skiday->user_id; 8 } 9}
Authserviceprovider
1<?php 2 3namespace App\Providers; 4 5use Illuminate\Foundation\Support\Providers\AuthServiceProvider as ServiceProvider; 6use Illuminate\Support\Facades\Gate; 7use App\Skiday; 8use App\User; 9use App\Policies\SkidayPolicy; 10 11class AuthServiceProvider extends ServiceProvider 12{ 13 protected $policies = [ 14 Skiday::class => SkidayPolicy::class, 15 ]; 16 17 public function boot() 18 { 19 $this->registerPolicies(); 20 21 // 22 } 23}
controller
1public function edit($skiday) 2 { 3 $skiday = Skiday::find($skiday); 4 // 下のコードで呼び出してポリシーでチェック 5 $this->authorize('update', $skiday); 6 return view('calendar.edit', ['skiday' => $skiday]); 7 }
書き方がわからず困っています。
どなたか知恵を貸していただきたいです。
よろしくお願いします。
php7.4.3
laravel6.18
回答1件
あなたの回答
tips
プレビュー