我在laravel 5.5中使用了Laratrust软件包,并且创建了一个页面来创建具有其角色和权限的用户。这运作良好,但问题出在我的更新页面上。我无法更新权限的值,也不知道为什么。
这是我更新页面的代码:
public function update(Request $request, User $user)
{
$request_data = User::find(1);
$request->validate([
'name' => 'required|string|max:255',
'email' => 'required|string|email|max:255|unique:users',
]);
$request_data=$request->except(['permissions']);
$user->update($request_data);
$user->syncPermissions($request->permissions);
return redirect('dashboard/index');
}
这是我的编辑刀片页面:
<form class="m-form m-form--fit m-form--label-align-right m-form--group-seperator" method="post" action="{{ url('dashboard/update/users',$user->id) }}">
{{ csrf_field() }}
{{ method_field('put') }}
<div class="m-portlet__body">
<div class="form-group{{ $errors->has('name') ? ' has-error' : '' }}">
<label for="name" class="col-md-4 control-label">Name</label>
<div class="col-md-6">
<input id="name" type="text" class="form-control" name="name" value="{{ $user->name }}" required autofocus>
@if ($errors->has('name'))
<span class="help-block">
<strong>{{ $errors->first('name') }}</strong>
</span>
@endif
</div>
</div>
答案 0 :(得分:0)
首先,请看以下这一行:
$request_data = User::find(1);
我不确定为什么要在其中-您在验证后立即重新定义。建议将其删除。
权限更新的问题可能在于您构造sync()方法的方式。这是我惯常看到的方式:
$user->permissions()->sync($request->get('permissions', []));
[]是可选的,但是尝试一下看是否有帮助。
此外,我不确定权限来自$request
对象。也许您没有在上面的代码片段中包含它,但是我没有看到它在刀片文件中的分配位置。因此,我的答案中的上述更新代码(Laravel标准而不是软件包格式)至少应该起作用-如果表单上确实没有permissions
字段来更改烫发
答案 1 :(得分:0)
您可以删除role_permission的记录,然后附加新的权限
$user->syncPermissions($request->permissions);
如果包中没有任何方法更新值,这可能会对您有所帮助