具有更新权限页面的完整性约束违规

时间:2019-07-17 23:55:51

标签: php laravel

我在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>

2 个答案:

答案 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);

如果包中没有任何方法更新值,这可能会对您有所帮助