我在這里看到了同樣的問題:Laravel policies : code change is ignored。是否有任何策略緩存要清除?在這里:Laravel Policy bug我正在編寫一個新策略,最簡單的一個,通過模式User檢查登錄的用戶是否與數據庫中的用戶相同,以便他可以編輯他的個人資料,所以......我創建策略文件:> php artisan make:policy UserPolicy我在以下位置注冊了政策AuthServiceProvider.php:...protected $policies = [ // 'App\Model' => 'App\Policies\ModelPolicy', User::class => UserPolicy::class,];...在UserPolicy.php我創建edit函數中:public function edit(User $authUser, User $user) { return $authUser->id === $user->id;}在UserController.php我有edit:public function edit($id){ // $user = User::findOrFail($id); $this->authorize($user); return view('user.edit', compact('user'));}看到什么地方不對了嗎?我也不是,因為它奏效了……第一次。然后我想更改策略,User模型有一個level屬性,普通用戶為 1,管理員為 5,超級用戶為 99 等等。所以我希望管理員或超級用戶能夠更改用戶數據,所以我將 的函數重寫UserPolicy.php為edit:public function edit(User $authUser, User $user) { return ($authUser->id === $user->id) || ($user->level > 1);}當然我在這里犯了一個錯誤,我應該檢查$authUserand nor $user。當我在瀏覽器中簽入時,函數返回 false,服務器給了我一個403This action is unauthorized.,沒關系?,F在是奇怪的事情。我糾正了功能:public function edit(User $authUser, User $user) { return ($authUser->id === $user->id) || ($authUser->level > 1);}它返回 403...public function edit(User $authUser, User $user) { return true;}它返回 403...我從文件中刪除函數...它返回 403...我從 AuthServiceProvider 中刪除注冊... Ir 返回 403...不,我沒有使用 Gates 或其他東西,Laravel 應用程序幾乎是處女。我過去遇到過這個問題,突然出現,并且以相同的方式出現。我不知道在哪里尋找,尋找什么......我認為那將是一些我沒有掌握的互動,所以我想從這個項目開始時的政策開始。
1 回答

達令說
TA貢獻1821條經驗 獲得超6個贊
我發誓這曾經像我在上面發布的那樣工作(至少它曾經在 5 中工作)。我不得不改變
$this->authorize($user);
為了
$this->authorize('edit',?$user);
- 1 回答
- 0 關注
- 106 瀏覽
添加回答
舉報
0/150
提交
取消