为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

PHP
qq_遁去的一_1 2023-04-02 10:57:32
我在这里看到了同样的问题: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);



查看完整回答
反对 回复 2023-04-02
  • 1 回答
  • 0 关注
  • 51 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信