Laravel 策略:有错误吗?缓存?怎么解决?

我在这里看到了同样的问题: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,服务器给了我一个403

This action is unauthorized.,没关系。现在是奇怪的事情。我纠正了功能:


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 应用程序几乎是处女。我过去遇到过这个问题,突然出现,并且以相同的方式出现。我不知道在哪里寻找,寻找什么......我认为那将是一些我没有掌握的互动,所以我想从这个项目开始时的政策开始。


qq_遁去的一_1
浏览 76回答 1
1回答

达令说

我发誓这曾经像我在上面发布的那样工作(至少它曾经在 5 中工作)。我不得不改变$this->authorize($user);为了$this->authorize('edit', $user);
打开App,查看更多内容
随时随地看视频慕课网APP