diff --git a/src/Core/Command/EditUserHandler.php b/src/Core/Command/EditUserHandler.php index 46a7ed64f..790531eb1 100644 --- a/src/Core/Command/EditUserHandler.php +++ b/src/Core/Command/EditUserHandler.php @@ -134,6 +134,7 @@ class EditUserHandler new UserWillBeSaved($user, $actor, $data) ); + $this->validator->setUser($user); $this->validator->assertValid(array_merge($user->getDirty(), $validate)); $user->save(); diff --git a/src/Core/Validator/UserValidator.php b/src/Core/Validator/UserValidator.php index 7fd421e41..e37f78b87 100644 --- a/src/Core/Validator/UserValidator.php +++ b/src/Core/Validator/UserValidator.php @@ -10,24 +10,55 @@ namespace Flarum\Core\Validator; +use Flarum\Core\User; + class UserValidator extends AbstractValidator { - protected $rules = [ - 'username' => [ - 'required', - 'alpha_dash', - 'unique:users', - 'min:3', - 'max:30' - ], - 'email' => [ - 'required', - 'email', - 'unique:users' - ], - 'password' => [ - 'required', - 'min:8' - ] - ]; + /** + * @var User + */ + protected $user; + + /** + * @return User + */ + public function getUser() + { + return $this->user; + } + + /** + * @param User $user + */ + public function setUser(User $user) + { + $this->user = $user; + } + + /** + * {@inheritdoc} + */ + protected function getRules() + { + $idSuffix = $this->user ? ','.$this->user->id : ''; + + return [ + 'username' => [ + 'required', + 'alpha_dash', + 'unique:users,username'.$idSuffix, + 'min:3', + 'max:30' + ], + 'email' => [ + 'required', + 'email', + 'unique:users,email'.$idSuffix + ], + 'password' => [ + 'required', + 'min:8' + ] + ]; + } }