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