【发布时间】:2021-06-16 00:57:07
【问题描述】:
我想确保当前用户能够编辑用户凭据,因此我制定了以下 UserPolicy:
class UserPolicy
{
use HandlesAuthorization;
public function update(User $user, User $model)
{
return true;
//return $user->is($model);
}
}
我什至在 AppServiceProvider 中注册了策略:
protected $policies = [
User::class => UserPolicy::class
];
现在我尝试将以下中间件添加到 web.php 中的更新路由:“->middleware('can:update,user');”像这样:
Route::patch('/profiles/{user}',function (){
dd('It works');
})->middleware('can:update,user');
但我不断收到以下错误:
找不到错误类“2”
其中 2 是我们尝试修补的用户 ID。如果我使用用户 ID 1 登录,那将是找不到的类。我不明白为什么。我按照 Laravel 网站 (https://laravel.com/docs/8.x/authorization#via-middleware) 上的文档进行操作。
我也尝试将 {user} 设置为 {user:id} -> 结果相同
我曾尝试在“can”上添加 id,如下所示:can:update,user:id -> Gives 403 not authorized
edit.blade.php 有以下内容:
<form action="/profiles/{{ auth()->user()->id }}" method="POST">
@csrf
@method('PATCH')
...INPUTS...
</form>
我当然试过运行:"php artisan optimize" 没有效果
我在这里缺少什么?怎么了?
编辑:
我现在用 Gate 尝试了同样的事情。我将以下内容放在 AppServiceProvider.php 中:
public function boot()
{
Gate::define('edit-user', function(User $currentUser, User $user){
return true;
//return $currentUser->id === $user->id;
});
}
以及 web.php 中的以下中间件:
Route::patch('/profiles/{user}',function (){
dd('It works');
})->middleware('can:edit-user,user');
它给了我完全相同的错误:找不到第 2 类
我什至尝试像这样传递完整的模型路径:
Route::patch('/profiles/{user}',function (){
dd('It works');
})->middleware('can:edit-user,App\Models\User');
它给了我以下错误:
参数 2 传递给 App\Providers\AppServiceProvider::App\Providers{closure}() 必须是 App\Models\User 的实例,给定的字符串,调用 /var/www/vhosts/domain.com/httpdocs/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php 在第 474 行
【问题讨论】: