第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

laravel 中的策略總是未經(jīng)授權(quán)的

laravel 中的策略總是未經(jīng)授權(quán)的

PHP
catspeake 2022-10-28 16:14:01
我正在嘗試在 Post Model 中制定政策,我遵循文檔但仍然在 api.php 中始終返回 falseRoute::put('post/{id}','PostController@update')->middleware('auth:api');在后控制器public function update(Request $request, Post $post,$id){        $this->authorize('update',$post);        $request->validate(['content'=>'required']);        $post = $post->find($id);        $post->content = $request->content;        $post->save();return response()->json($post, 200);}在后政策public function update(User $user, Post $post)  {        return $user->id === $post->user_id;  }在 AuthServiceProvider 中protected $policies = [        'App\Post' => 'App\Policies\PostPolicy',];請忽略模型,因為模型工作正常,如果我在控制器中評論 $this->authorize 工作正常,但沒有身份驗證,用戶可以更新模型中的任何內(nèi)容我使用 api 使用郵遞員進行測試authorization = Bearer 'api_token'
查看完整描述

1 回答

?
明月笑刀無情

TA貢獻1828條經(jīng)驗 獲得超4個贊

您遇到此問題的原因是因為策略中的更新方法需要模型的已加載實例,但是,在您當(dāng)前的設(shè)置中,您將傳遞模型的未加載/空實例。


您可以通過使用Route Model Binding來解決這個問題。將您的路線更改{id}為{post}:


Route::put('post/{post}','PostController@update')->middleware('auth:api');

然后從您的方法中刪除$id參數(shù):update()


public function update(Request $request, Post $post)

{

    $this->authorize('update', $post);


    $request->validate(['content' => 'required']);


    $post->content = $request->content;

    $post->save();


    return response()->json($post, 200);

}

另外,請注意現(xiàn)在您不必使用find來加載模型,這是因為 Laravel 正在為您加載模型。


路由模型綁定通過查找與 uri 段同名的參數(shù)名稱來工作,即{post}在路由和$post方法參數(shù)上,并且由于$post類型提示是模型,Laravel 知道使用 的值{post}來加載(查找)Post模型。


查看完整回答
反對 回復(fù) 2022-10-28
  • 1 回答
  • 0 關(guān)注
  • 107 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號