在我的项目中,我有角色和权限,并且我为我的用户制作了一个控制器,这样他们可以编辑他们的个人资料,因为usercontroller仅限于管理员角色。
现在我的问题是,当用户更新他的配置文件时,他的角色访问权限将被分离。我应该怎么做才能让用户在不改变角色的情况下编辑自己的个人资料?
这是我的更新功能:
public function update(Request $request, $id)
{
$user = User::findOrFail($id); //Get role specified by id
//Validate name, email and password fields
$this->validate($request, [
'name'=>'required|max:120',
'username'=>'required|max:120',
'email'=>'required|email|unique:users,email,'.$id,
'password' => 'nullable|string|min:6|confirmed'
]);
$input = $request->only(['name', 'username', 'email']); //Retreive the name, email and password fields
if (trim(Input::get('password')) != '') {
$user->password = Hash::make(trim(Input::get('password')));
}
$user->fill($input)->save();
return view('users.profile')
->with('flash_message',
'Your Profile successfully edited.');
}
用户模型:
protected $fillable = [
'name', 'username', 'email', 'password', 'affiliate_id', 'referred_by',
];
数据库:
public function up()
{
Schema::create('users', function (Blueprint $table) {
$table->increments('id');
$table->string('name');
$table->string('username')->unique();
$table->string('email')->unique();
$table->string('password');
$table->string('referred_by')->nullable();
$table->string('affiliate_id')->unique();
$table->rememberToken();
$table->timestamps();
});
}
您可以在编辑视图中传递该用户的角色,如果该用户是管理员,您将显示角色复选框或您使用过的任何内容,如果不是管理员,您将不显示角色。
public function edit(Request $request, $id)
{
$user_role = User::findOrFail($id)->roles->toArray();
return view('UserCRUD.edit')->with('user_role', $user_role);
}
在视野中
@if($user_role == 'admin')
<label>
<input type="checkbox" name="role[]" value="value">
</label>
@endif
如果您显示角色,那么只有他们将在$请求中-
array:8 [▼
"_method" => "PATCH"
"_token" => "8xxRjgKaJNlJOwZZ2vZYecs6GrEWjpYqbCtWULJO"
"username" => "testcase1"
"email" => "test1@test.com"
"password" => ""
"confirm_password" => ""
"firstname" => "Test"
"lastname" => "One"
]
如果我dd($request-
array:9 [▼
"_method" => "PATCH"
"_token" => "8xxRjgKaJNlJOwZZ2vZYecs6GrEWjpYqbCtWULJO"
"username" => "testcase1"
"email" => "test1@test.com"
"password" => ""
"confirm_password" => ""
"firstname" => "Test"
"lastname" => "One"
"role" => array:1 [▼
0 => "2"
]
]
当更新时,您只需要检查是否设置了角色,否则就不更新。
$user = User::findOrFail($id);
$user->update($request->all());
if (isset($request->all()['role'])) {
$user->roles()->sync($request->all()['role']);
}