mirror of
https://github.com/BookStackApp/BookStack.git
synced 2025-06-07 03:14:33 +08:00
Prevented normal users from changing own email
To address #1542 Updates to only allow email changes by users with the users-manage role permission.
This commit is contained in:
@ -146,7 +146,12 @@ class UserController extends Controller
|
|||||||
]);
|
]);
|
||||||
|
|
||||||
$user = $this->userRepo->getById($id);
|
$user = $this->userRepo->getById($id);
|
||||||
$user->fill($request->all());
|
$user->fill($request->except(['email']));
|
||||||
|
|
||||||
|
// Email updates
|
||||||
|
if (userCan('users-manage') && $request->filled('email')) {
|
||||||
|
$user->email = $request->get('email');
|
||||||
|
}
|
||||||
|
|
||||||
// Role updates
|
// Role updates
|
||||||
if (userCan('users-manage') && $request->filled('roles')) {
|
if (userCan('users-manage') && $request->filled('roles')) {
|
||||||
|
@ -1,6 +1,7 @@
|
|||||||
<input type="text" id="{{ $name }}" name="{{ $name }}"
|
<input type="text" id="{{ $name }}" name="{{ $name }}"
|
||||||
@if($errors->has($name)) class="text-neg" @endif
|
@if($errors->has($name)) class="text-neg" @endif
|
||||||
@if(isset($placeholder)) placeholder="{{$placeholder}}" @endif
|
@if(isset($placeholder)) placeholder="{{$placeholder}}" @endif
|
||||||
|
@if(isset($disabled) && $disabled) disabled="disabled" @endif
|
||||||
@if(isset($tabindex)) tabindex="{{$tabindex}}" @endif
|
@if(isset($tabindex)) tabindex="{{$tabindex}}" @endif
|
||||||
@if(isset($model) || old($name)) value="{{ old($name) ? old($name) : $model->$name}}" @endif>
|
@if(isset($model) || old($name)) value="{{ old($name) ? old($name) : $model->$name}}" @endif>
|
||||||
@if($errors->has($name))
|
@if($errors->has($name))
|
||||||
|
@ -19,7 +19,7 @@
|
|||||||
<div>
|
<div>
|
||||||
@if($authMethod !== 'ldap' || userCan('users-manage'))
|
@if($authMethod !== 'ldap' || userCan('users-manage'))
|
||||||
<label for="email">{{ trans('auth.email') }}</label>
|
<label for="email">{{ trans('auth.email') }}</label>
|
||||||
@include('form.text', ['name' => 'email'])
|
@include('form.text', ['name' => 'email', 'disabled' => !userCan('users-manage')])
|
||||||
@endif
|
@endif
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -119,6 +119,43 @@ class RolesTest extends BrowserKitTest
|
|||||||
$this->actingAs($this->user)->visit('/')->dontSee($usersLink);
|
$this->actingAs($this->user)->visit('/')->dontSee($usersLink);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function test_user_cannot_change_email_unless_they_have_manage_users_permission()
|
||||||
|
{
|
||||||
|
$userProfileUrl = '/settings/users/' . $this->user->id;
|
||||||
|
$originalEmail = $this->user->email;
|
||||||
|
$this->actingAs($this->user);
|
||||||
|
|
||||||
|
$this->visit($userProfileUrl)
|
||||||
|
->assertResponseOk()
|
||||||
|
->seeElement('input[name=email][disabled]');
|
||||||
|
$this->put($userProfileUrl, [
|
||||||
|
'name' => 'my_new_name',
|
||||||
|
'email' => 'new_email@example.com',
|
||||||
|
]);
|
||||||
|
$this->seeInDatabase('users', [
|
||||||
|
'id' => $this->user->id,
|
||||||
|
'email' => $originalEmail,
|
||||||
|
'name' => 'my_new_name',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->giveUserPermissions($this->user, ['users-manage']);
|
||||||
|
|
||||||
|
$this->visit($userProfileUrl)
|
||||||
|
->assertResponseOk()
|
||||||
|
->dontSeeElement('input[name=email][disabled]')
|
||||||
|
->seeElement('input[name=email]');
|
||||||
|
$this->put($userProfileUrl, [
|
||||||
|
'name' => 'my_new_name_2',
|
||||||
|
'email' => 'new_email@example.com',
|
||||||
|
]);
|
||||||
|
|
||||||
|
$this->seeInDatabase('users', [
|
||||||
|
'id' => $this->user->id,
|
||||||
|
'email' => 'new_email@example.com',
|
||||||
|
'name' => 'my_new_name_2',
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
public function test_user_roles_manage_permission()
|
public function test_user_roles_manage_permission()
|
||||||
{
|
{
|
||||||
$this->actingAs($this->user)->visit('/settings/roles')
|
$this->actingAs($this->user)->visit('/settings/roles')
|
||||||
|
Reference in New Issue
Block a user