Créer un compte utilisateur en ligne de commande¶
Vous êtes administrateur·rice d'une instance Kirexo et vous voulez ajouter un compte (utilisateur, admin ou mixte) sans passer par les fixtures.
L'inscription publique étant fermée dans Kirexo — et l'interface d'admin gérant les comptes mais jamais le contenu (cf. Architecture) — la commande app:user:create est la voie pour provisionner un premier compte admin, puis ajouter des comptes à la main.
Prérequis¶
- La stack Docker est démarrée (
castor docker:up). - Les migrations sont à jour (
castor doctrine:migrate). - Un terminal interactif (TTY) : le mot de passe est saisi en mode masqué, ce qui exige un vrai terminal. Une invocation non interactive (pipe, job CI sans pseudo-TTY) ne pourra pas lire le mot de passe.
Invocation¶
La commande n'a pas de cible Castor dédiée : elle passe par la cible générique castor console, qui exécute bin/console dans le conteneur php.
La signature complète est :
Le prénom (firstName) est un argument obligatoire, placé après l'email. Il sert aussi à nommer le carnet par défaut créé en même temps que le compte (voir Carnet par défaut).
Depuis l'hôte¶
Depuis le conteneur php¶
Si vous avez déjà un shell dans le conteneur (castor docker:sh) :
La commande demande ensuite le mot de passe en mode masqué :
Le mot de passe n'est jamais passé en argument — il resterait sinon dans l'historique du shell. Il est lu en clair-masqué sur le TTY et refusé s'il est vide.
Arguments et option¶
| Élément | Obligatoire | Défaut | Description |
|---|---|---|---|
email (argument) |
oui | — | Email du compte. Validé : non vide et format email correct. |
firstName (argument) |
oui | — | Prénom du titulaire. Non vide. Placé après l'email. Nomme le carnet par défaut créé avec le compte. |
--role (option) |
non | user |
Rôle du compte : user, admin ou both. |
Carnet par défaut¶
À la création, la commande crée le compte et son premier carnet dans la même unité de travail. Le carnet reçoit un nom dérivé du prénom : « Le carnet de \<prénom> ». Par exemple, app:user:create alice@kirexo.local Alice crée un compte doté d'un carnet nommé « Le carnet de Alice ».
Ce nom n'est qu'un défaut : il reste librement modifiable ensuite par l'utilisateur, qui peut aussi créer d'autres carnets. Tout compte possède ainsi au moins un carnet dès sa création. Sur le modèle de données multi-carnets, voir Carnets : modèle de données et migration mono → multi-carnets.
Correspondance --role → rôles stockés¶
--role |
Rôles attribués |
|---|---|
user |
ROLE_USER |
admin |
ROLE_ADMIN |
both |
ROLE_USER, ROLE_ADMIN |
Exemples¶
Créer un compte utilisateur standard (rôle par défaut) :
Créer un compte administrateur :
Créer un compte cumulant les deux rôles :
En cas de succès, la commande affiche un message confirmant l'email, les rôles attribués et l'identifiant du compte créé, et se termine avec le code de sortie 0.
Cas d'erreur¶
La commande s'arrête avec le code de sortie 1 et un message explicite dans les situations suivantes :
| Situation | Message |
|---|---|
--role hors user / admin / both |
Rôle invalide, avec la liste des valeurs acceptées. |
| Email vide | L'email ne peut pas être vide. |
| Prénom vide | Le prénom ne peut pas être vide. |
| Email mal formé | Email invalide, avec la raison renvoyée par le validateur. |
| Email déjà utilisé | Un compte existe déjà avec cet email. |
| Mot de passe vide | Le mot de passe ne peut pas être vide. |
Aucun compte n'est créé tant qu'une de ces conditions échoue.
Sous le capot¶
La commande est implémentée dans src/Command/AppUserCreateCommand.php. Elle :
- valide l'email avec la contrainte
Symfony\Component\Validator\Constraints\Email; - vérifie l'unicité via
UserRepositoryInterface::findByEmail()(src/Repository/UserRepositoryInterface.php) ; - hache le mot de passe avec
UserPasswordHasherInterface; - persiste le compte via
UserRepositoryInterface::save()(sans flush immédiat) ; - construit un
Notebookdont le nom est dérivé du prénom viaNotebook::defaultName()(src/Entity/Notebook.php), puis le persiste viaNotebookRepositoryInterface::save()(src/Repository/NotebookRepositoryInterface.php) — l'INSERT du compte précède celui du carnet, dont le propriétaire est non nul.
Voir aussi¶
- Commandes Castor — dont la cible générique
castor console. - Architecture — pourquoi l'admin gère les comptes mais pas la publication.