php - 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);
}
当然我在这里犯了一个错误,我应该检查$authUser
and 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);
解决方案来自这篇文章
解决方案
我发誓这曾经像我上面发布的那样工作(至少它曾经在 5 中工作)。我不得不改变
$this->authorize($user);
为了
$this->authorize('edit', $user);
解决方案来自这篇文章
推荐阅读
- r - R加入返回所有NA
- html - 如何在锚标记的href中给出angularjs数据绑定值
- android - 片段简历:显示和隐藏交易不起作用
- sql-server - 如何根据ID上传xls文件到sql server
- java - oncreate 应用程序类中的 IllegalStateException
- php - PHP ACPu 存储作为会话持有者
- javascript - 无法在 vue webpack 项目中导入 Ace 文档对象?
- php - 如何在 php 'mg/dl' 中回显这个结果;
- java - 对数组进行洗牌时遇到问题 - 返回 null 而不是随机整数
- jquery - Ajax 仅发送选定的数据