我在这里看到了同样的问题: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.,没关系。现在是奇怪的事情。我纠正了功能: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 关注
- 75 浏览
添加回答
举报
0/150
提交
取消