当我想使用策略限制用户访问时出现错误,当用户以访客身份访问系统时,如果用户为admin,系统将显示编辑按钮,则系统不会显示编辑按钮,反之亦然。但是当用户以管理员身份登录时出现错误,而用户未登录时没有错误。这是我的错误消息
oo few arguments to function App\Policies\InverterPolicy::update(), 1 passed in /Applications/XAMPP/xamppfiles/htdocs/PROJECT/ta/vendor/laravel/framework/src/Illuminate/Auth/Access/Gate.php on line 691 and exactly 2 expected
这是我的刀刃
@can('update',App\Inverter::class)
<a href="{{ route('inverters.edit',[$data->id]) }}"><button type="button" class="btn btn-warning" name="button">Edit</button></a>
@endcan
这是我的控制器
public function update(Request $request, Inverter $inverter)
{
$this->authorize('update',$inverter);
$data = $request->validate([
'name'=>'bail|required|max:191',
'warehouse_id'=>'bail|required|numeric',
'company_id'=>'bail|required|numeric',
'length'=>'numeric',
'width'=>'numeric',
'height'=>'numeric',
'maxInputPower'=>'numeric',
'maxInputVoltage'=>'numeric',
'maxInputCurrent'=>'numeric',
'MPPTOperatingRange'=>'numeric',
'parallelInput'=>'numeric',
'MPPTTrackers'=>'numeric',
'nominalOutputPower'=>'numeric',
'maxOutputPower'=>'numeric',
'nominalOutputCurrent'=>'numeric',
'maxOutputCurrent'=>'numeric',
'ACFrequencyRange'=>'numeric',
'THDI'=>'numeric',
'efficiency'=>'numeric',
'MPPTEfficiency'=>'numeric',
'euroEfficiency'=>'numeric',
]);
Inverter::find($inverter->id)->update($data);
return redirect(action('InverterController@index'));
}
这是我的政策
public function update(User $user, Inverter $inverter)
{
return in_array($user->role,[
'Admin',
]);
}
答案 0 :(得分:1)
当使用类名(而不是实例)作为第二个参数在User上调用can()
方法时,实际上实际上是在根本没有第二个参数的情况下调用了该方法。只需在您的策略中将$inverter
设置为可空即可,并且应该将其修复:
public function update(User $user, Inverter $inverter = null)
{
return in_array($user->role,[
'Admin',
]);
}