【问题标题】:Laravel 5.8 403 This action is unauthorizedLaravel 5.8 403 此操作未经授权
【发布时间】:2020-04-20 22:37:39
【问题描述】:

我有update这样的方法

  public function update(Contact  $contact)
{

    $this->authorize('ownItems', $contact);
    ......
}

ContactPolicy

public function ownItem(User $user,Contact $contact)
{
  return true;
} 

它可以正常工作,但是当我在我的 update 方法中将 Contcact 替换为 ContactRequest 时 给我看看这个:

403 此操作未经授权。

update 方法:

public function update(ContactRequest  $contact)
{
    $this->authorize('ownItems', $contact);
    .......
}

ContactRequest 中的authorize 方法:

public function authorize()
{
    return true;
}

【问题讨论】:

  • ContactRequest 是 laravel Request 类不是 Contact 类你需要同时注入
  • 我知道这一点,但我的问题是authorize 方法。为什么它告诉我403
  • 您在策略中有一个 ownItem 方法,但您在控制器中调用了 ownItems

标签: php laravel laravel-5 laravel-authorization laravel-formrequest


【解决方案1】:

ContactRequest 是一个 laravel Request 类实例


public function update(ContactRequest $request,Contact  $contact)
{
    $this->authorize('ownItems', $contact);
    .......
}

【讨论】:

    【解决方案2】:

    你在$this->authorize('ownItems', $contact);中拼错了方法名,应该是“ownItem”

    UPD

    ContactRequest 可能是Illuminate\Http\Request 的实例,但authorize 方法等待Model 实例,如果您的请求中没有模型标识符。首先你应该找到模型:$model = Contact::find($contact->input('id')),然后用$this->authorize('ownItems', $model)检查你的政策

    【讨论】:

    • 谢谢,但输入错误。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-22
    • 2020-04-23
    相关资源
    最近更新 更多