首页 > 解决方案 > Laravel 政策:有错误吗?缓存?怎么解决?

问题描述

我在这里看到了同样的问题:Laravel 政策:代码更改被忽略。是否有要清除的策略缓存?在这里:Laravel 政策错误

我正在编写一个新策略,最简单的策略,通过模式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'sedit函数重写为:

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

can()编辑::::::::::::::::::::::::::::::::::::::这更荒谬...... # 事情做了它应该做的事情:

> php artisan tinker
>>> $user = App\User::find(1)
>>> $user->can('edit', $user)
true
>>> $user2 = App\User::find(2)
>>> $user->can('edit', $user2)
false

所以,问题来了???

$this->authorize($user);

编辑 2 ::::::::::::: 已解决 :::::::::::::::::::::::

我发誓这曾经像我上面发布的那样工作(至少它曾经在 5 中工作)。我不得不改变

$this->authorize($user);

为了

$this->authorize('edit', $user);

解决方案来自这篇文章

标签: phplaravel

解决方案


我发誓这曾经像我上面发布的那样工作(至少它曾经在 5 中工作)。我不得不改变

$this->authorize($user);

为了

$this->authorize('edit', $user);

解决方案来自这篇文章


推荐阅读