diff --git a/app/Http/Controllers/AccountController.php b/app/Http/Controllers/AccountController.php index 17af36db..158f9b19 100644 --- a/app/Http/Controllers/AccountController.php +++ b/app/Http/Controllers/AccountController.php @@ -340,6 +340,11 @@ public function update($id) 'suppress_real_name' ); + // TODO: Move to proper validators and 'validated' output? + if (!\Auth::user()->can('changeUsername', $user)) { + unset($input['display_name']); + } + $this->userForm->validate($input, $user->id); $this->userRepository->updateMember($id, $input, \Auth::user()->hasRole('admin')); diff --git a/app/Policies/UserPolicy.php b/app/Policies/UserPolicy.php index ee122338..2c02cd9f 100644 --- a/app/Policies/UserPolicy.php +++ b/app/Policies/UserPolicy.php @@ -25,4 +25,9 @@ public function unban(User $authedUser, User $user) // Admins can ban others return $authedUser->isAdmin(); } + + public function changeUsername(User $authedUser, User $user) + { + return $authedUser->isAdmin(); + } } diff --git a/app/Validators/UserValidator.php b/app/Validators/UserValidator.php index 15b48ea4..33592944 100644 --- a/app/Validators/UserValidator.php +++ b/app/Validators/UserValidator.php @@ -40,7 +40,7 @@ class UserValidator extends FormValidator 'email' => 'required|email|unique:users,email,{id}', 'secondary_email' => 'email|unique:users,secondary_email,{id}', 'password' => 'min:8', - 'display_name' => '', + 'display_name' => 'unique:users,display_name,{id}', 'monthly_subscription' => '', 'rules_agreed' => '', ]; diff --git a/resources/views/account/edit.blade.php b/resources/views/account/edit.blade.php index eda1b817..7038171c 100644 --- a/resources/views/account/edit.blade.php +++ b/resources/views/account/edit.blade.php @@ -39,7 +39,7 @@
{!! Form::label('display_name', 'Username') !!} - {!! Form::text('display_name', null, ['class'=>'form-control', 'autocomplete'=>'off', 'readonly'=>'readonly']) !!} + {!! Form::text('display_name', null, ['class'=>'form-control', 'autocomplete'=>'off', 'readonly'=> !Auth::user()->can('changeUsername', $user) ]) !!} Your Username will be used for display purposes on the members system, it cannot be changed once set without contacting the board {!! FlashNotification::getErrorDetail('display_name') !!}