Projets et environnements
L'écran Projets et environnements permet de créer les projets qui regroupent agents, modèles et budgets, de les
modifier ou de les supprimer, et d'ajouter leurs environnements dev, test, staging et prod. Chemin dans le
portail : /admin/projects. Il sert aux administrateurs du tenant (tenant_admin) ; les autres membres du tenant
lisent les projets auxquels ils ont accès.
Ce que montre l'écran
Deux blocs, l'un sous l'autre.
Tableau Projets, avec Actualiser et Nouveau projet :
| Colonne | Contenu |
|---|---|
| Slug | Identifiant du projet dans le tenant (minuscules, chiffres, tirets, 63 caractères au plus). |
| Nom | Nom affiché. |
| Description | Texte libre. |
| Créé | Date de création. |
Un clic sur une ligne ouvre un panneau latéral avec le projet complet lu dans l'API (environnements compris). La liste est paginée par slug. État vide : Aucun projet, « Les projets délimitent agents, budgets et environnements. »
Bloc Environnements du projet, affiché dès qu'un projet existe : un sélecteur Projet (le premier projet est sélectionné par défaut) et le tableau de ses environnements :
| Colonne | Contenu |
|---|---|
| Nom | dev, test, staging ou prod. |
| Créé | Date de création. |
État vide : Aucun environnement, « Ajoutez dev, test, staging ou prod. »
Actions
| Bouton ou action | Ce qu'il fait | Appel d'API | Rôles |
|---|---|---|---|
| Ouverture de l'écran, Actualiser | Lit les projets ; le sélecteur lit jusqu'à 200 projets. | GET /v1/projects | Membre du tenant |
| Nouveau projet puis Créer | Formulaire Slug (obligatoire), Nom (obligatoire), Description. | POST /v1/projects | tenant_admin |
| Clic sur une ligne de projet | Ouvre le panneau de détail. | GET /v1/projects/{id} | Membre qui détient la relation viewer sur le projet |
| Modifier | Boîte de dialogue Nom, Description, puis Modifier. | PATCH /v1/projects/{id} | tenant_admin avec la relation editor sur le projet |
| Supprimer | Confirmation destructive qui liste l'impact (dépendants lus dans le graphe de lignage), puis suppression. | DELETE /v1/projects/{id} (impact : GET /v1/lineage/graph) | tenant_admin avec la relation owner sur le projet |
| Sélecteur Projet | Choisit le projet dont les environnements s'affichent. | GET /v1/projects/{id}/environments | Membre qui détient la relation viewer |
| Nouvel environnement puis Créer | Formulaire Nom (obligatoire : dev, test, staging, prod) et Paramètres (JSON, {} par défaut). | POST /v1/projects/{id}/environments | tenant_admin avec la relation editor |
Rôles
D'après services/control-plane/src/eai/domains/tenancy/__init__.py :
- Lire la liste exige un principal rattaché à un tenant (
require_tenant) ; un principal sans tenant reçoittenant_required. - Créer un projet ou un environnement, modifier et supprimer exigent
tenant_admin(platform_adminpasse toujours). - En plus du rôle, les routes d'un projet vérifient une relation ReBAC (
require_relation) :viewerpour lire,editorpour modifier et ajouter un environnement,ownerpour supprimer. Le créateur d'un projet en est inscrit propriétaire.
Le portail affiche les boutons à tout utilisateur (aucun rôle déclaré dans projectsCfg) ; le serveur fait autorité.
Supprimer retire définitivement le projet. Lisez l'impact listé par la confirmation (agents, clés, quotas qui dépendent du projet) avant de confirmer.
Tâches courantes
Créer un projet et ses environnements
- Créer le projet. Bouton Nouveau projet : saisissez le Slug (
risk), le Nom et une Description, puis Créer. Résultat attendu : le message Créé et la nouvelle ligne. En cas d'échec :conflict(HTTP 409) si le slug existe dans le tenant ;forbiddensi vous n'êtes pastenant_admin. - Le sélectionner. Dans le bloc Environnements du projet, choisissez-le dans Projet. Résultat attendu : l'état vide Aucun environnement. En cas d'échec : le bloc manque quand la liste des projets est vide ; cliquez Actualiser.
- Ajouter chaque environnement. Bouton Nouvel environnement, choisissez Nom (
dev, puisprod), gardez Paramètres à{}et Créer. Les environnements séparent les déploiements des agents et des applications. Résultat attendu : une ligne par environnement. En cas d'échec :conflict(HTTP 409) si l'environnement existe déjà pour le projet.
Renommer ou décrire un projet
- Ouvrir l'action. Menu de la ligne > Modifier. Résultat attendu : une boîte de dialogue remplie avec le nom
et la description actuels. En cas d'échec : une erreur
forbiddenà l'envoi signifie qu'il vous manque la relationeditorou le rôletenant_admin. - Changer les valeurs et envoyer. Bouton Modifier. Résultat attendu : le message Terminé et les nouvelles valeurs dans le tableau. En cas d'échec : lisez le code de l'erreur sous le formulaire.
Supprimer un projet
- Ouvrir l'action. Menu de la ligne > Supprimer. La confirmation liste les dépendants trouvés dans le graphe de lignage. Résultat attendu : la boîte de confirmation destructive. En cas d'échec : quand le graphe ne peut pas être lu, la boîte garde le risque par défaut « Supprimer ne peut pas être annulé depuis cet écran ».
- Confirmer. Résultat attendu : le message Terminé et la ligne disparaît. En cas d'échec :
forbiddensi vous n'êtes pas propriétaire du projet ;not_founds'il a déjà été supprimé.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
tenant_required (HTTP 403) | La session n'agit pas dans un tenant. | Connectez-vous avec un compte rattaché à un tenant. |
forbidden (HTTP 403) sur Créer, Modifier ou Supprimer | Rôle tenant_admin absent, ou relation ReBAC editor / owner absente sur le projet. | Adressez-vous à un tenant_admin, ou obtenez la relation via Permissions (ReBAC). |
conflict (HTTP 409) | Un projet avec ce slug, ou cet environnement du projet, existe déjà. | Prenez un autre slug, ou gardez l'environnement existant. |
not_found (HTTP 404) | Le projet a été supprimé ou l'identifiant n'est pas un UUID. | Cliquez Actualiser. |
| Le bloc Environnements du projet manque | Le tenant n'a encore aucun projet. | Créez d'abord un projet. |