我有一个Laravel 9项目被用作API。我使用Laravel Spatie Permissions包来执行权限和角色检查。我设置了一个名为UserPolicy
的Laravel策略,到目前为止,除了尝试授权show
函数时,我的策略方法工作正常。
我的API只传递模型的ID,这很好,而且,我已经有了我的用户。我正在检查登录的用户是否能够在这里的平台上查看另一个可能不是他们自己的用户。
错误:
函数App\Policies\UserManagement\UserPolicy::view()的参数太少,在第798行的/Users/ryanholton/Sites/lespro-api/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate. php中传入了1个参数,而实际上需要2个参数
下面是我的控制器操作:
/**
* Display the specified resource.
*
* @param int $id
* @return \Illuminate\Http\Response
*/
public function show($id)
{
$this->authorize('view', User::class);
$user = User::with('roles')->find($id);
if (!$user) {
return response()->json([
'message' => 'User not found or invalid user ID'
], 404);
}
return response()->json([
'user' => $user
], 200);
}
我的政策是:
<?php
namespace App\Policies\UserManagement;
use App\Models\User;
use Illuminate\Auth\Access\HandlesAuthorization;
class UserPolicy
{
use HandlesAuthorization;
/**
* Determine whether the user can view any models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function viewAny(User $user)
{
if ($user->can('user_index')) {
return true;
}
}
/**
* Determine whether the user can view the model.
*
* @param \App\Models\User $user
* @param \App\Models\User $model
* @return \Illuminate\Auth\Access\Response|bool
*/
public function view(User $user, User $model)
{
if ($user->can('user_show')) {
return true;
}
}
/**
* Determine whether the user can create models.
*
* @param \App\Models\User $user
* @return \Illuminate\Auth\Access\Response|bool
*/
public function create(User $user)
{
if ($user->can('user_store')) {
return true;
}
}
/**
* Determine whether the user can update the model.
*
* @param \App\Models\User $user
* @param \App\Models\User $model
* @return \Illuminate\Auth\Access\Response|bool
*/
public function update(User $user, User $model)
{
if ($user->can('user_update')) {
return true;
}
}
/**
* Determine whether the user can delete the model.
*
* @param \App\Models\User $user
* @param \App\Models\User $model
* @return \Illuminate\Auth\Access\Response|bool
*/
public function delete(User $user, User $model)
{
if ($user->can('user_destroy')) {
return true;
}
}
}
2条答案
按热度按时间wgxvkvu91#
对于
authorize
方法,必须传递$user
示例并在策略中删除额外的用户参数
1wnzp6jl2#
错误显示只传递了一个参数,而现有的方法需要两个参数,可能您根本不知道调用了哪个方法--它是UserPolicy类的***view***方法。
如果我们注意一下,我们确实会看到这个方法需要两个参数。
尝试删除最后一个选项-这应该会有帮助。您的方法将看起来: