Approbations
L'écran Approbations vous permet de lire les demandes qui attendent une décision humaine (appels d'outils, étapes d'exécution, promotions, accès d'urgence) et de les approuver, les rejeter ou les annuler. Chemin dans le portail : /agents/approvals ; le titre de la page est Boîte d'approbation. Les approbateurs (administrateurs du tenant, responsables sécurité, développeurs, responsables métier) décident les demandes ; le demandeur peut seulement les annuler. L'écran est dessiné par portal/src/screens/agents.tsx.
Ce que montre l'écran
- Tableau Demandes d'approbation, lu par
GET /v1/approvals(50 lignes par appel, pagination par curseur). Avant de répondre, le Control Plane marque comme expirées les demandes dont l'échéance est passée. Colonnes : Identifiant, Action, Type de ressource, Identifiant de ressource, Demandeur, Raison, Statut, Créé. - Filtre Statut (En attente, Approuvé, Rejeté, Annulé,
expired, ou tous), puis Filtrer. - Liste vide : Rien en attente d'approbation, avec l'aide Les demandes apparaissent quand une politique exige une décision humaine. Les demandes sont créées par la plateforme (obligation d'une politique, outil marqué
requires_approval, promotion versactiveouapproved) ; cet écran n'a pas de bouton de création. - Un clic sur une ligne, ou le menu de ligne Voir le détail, ouvre un panneau latéral avec la demande lue par
GET /v1/approvals/{approval_id}: sa chronologie quand elle en a une, puis le JSON complet (contenu, quorum, rôles approbateurs, décisions).
Actions
Les actions de ligne ne s'affichent que tant que la demande est en attente.
| Bouton ou action | Ce qu'il fait | Appel d'API | Rôles |
|---|---|---|---|
| Actualiser (icône) | Recharge la liste. | GET /v1/approvals | Tout membre du tenant |
| Filtrer | Applique le filtre Statut. | GET /v1/approvals avec status | Tout membre du tenant |
| Clic sur une ligne ou menu Voir le détail | Ouvre le panneau de détail. | GET /v1/approvals/{approval_id} | Tout membre du tenant |
| Menu Approuver | Ouvre un formulaire avec un Commentaire facultatif, puis enregistre une approbation. La demande devient approuvée quand le nombre d'approbations atteint son quorum. | POST /v1/approvals/{approval_id}/decide | Rôles de approver_roles, par défaut tenant_admin, security_officer, developer, business_owner ; jamais le demandeur |
| Menu Rejeter | Ouvre un formulaire avec un Commentaire obligatoire, puis rejette la demande tout de suite. | POST /v1/approvals/{approval_id}/decide | Comme Approuver |
| Menu Annuler | Ouvre un formulaire avec une Raison obligatoire (3 à 2000 caractères), puis retire la demande. | POST /v1/approvals/{approval_id}/cancel | Le demandeur, tenant_admin, security_officer |
| Réessayer (état d'erreur) | Relance la lecture qui a échoué. | Même appel | Mêmes rôles |
Les formulaires de décision envoient ce corps (decision vaut approve ou reject) :
{"decision": "reject", "comment": "Amount above the delegation of the requester"}
Rôles
Le portail ne masque aucune action ; les règles se trouvent dans services/control-plane/src/eai/domains/approvals/service.py :
- Séparation des tâches : le demandeur, et tout utilisateur listé dans
payload.excluded_approvers, ne peut pas décider la demande (separation_of_duties, 403). - Rôles approbateurs : la demande peut fixer ses propres
approver_roles; sinonDEFAULT_APPROVER_ROLESs'applique (tenant_admin,security_officer,developer,business_owner).platform_adminpasse tous les contrôles de rôle. - Une décision par personne : une seconde décision du même approbateur est refusée (
already_decided). - Quorum : un rejet clôt la demande ; les approbations sont comptées jusqu'à atteindre le
quorum(1 à 10). - Annulation : le demandeur, ou un membre de
CANCELLERS(tenant_admin,security_officer).
Chaque décision et chaque annulation est écrite dans le journal d'audit.
Tâches courantes
Approuver une demande en attente
- Lister ce qui attend. Seules les demandes en attente peuvent être décidées. Choisissez En attente dans Statut et cliquez sur Filtrer. Résultat attendu : les demandes en attente, les plus récentes d'abord. En cas d'échec : Rien en attente d'approbation signifie qu'aucune demande n'attend dans le tenant.
- Lire la demande. Le contenu indique ce qui s'exécutera si vous approuvez. Cliquez sur la ligne et lisez
action,resource_type,payloadetquorumdans le panneau. Résultat attendu : vous connaissez l'action et son impact. En cas d'échec : si le panneau affiche une erreur, cliquez sur Réessayer. - L'approuver. Votre approbation compte pour le quorum. Dans le menu de ligne, cliquez sur Approuver, ajoutez un Commentaire, puis cliquez sur Approuver. Résultat attendu : le message Terminé ; le statut devient Approuvé, ou reste En attente tant que le quorum n'est pas atteint. En cas d'échec :
separation_of_dutiessignifie que vous êtes le demandeur ; sollicitez un autre approbateur.
Rejeter une demande avec un motif
- Ouvrir le formulaire. Un rejet doit être expliqué au demandeur et aux auditeurs. Dans le menu de ligne, cliquez sur Rejeter. Résultat attendu : un formulaire avec Commentaire. En cas d'échec : l'action manque quand la demande n'est plus en attente.
- Écrire le commentaire et confirmer. Le commentaire est conservé avec la décision. Saisissez le motif et cliquez sur Rejeter. Résultat attendu : le message Terminé et le statut Rejeté ; une exécution en attente reçoit le rejet. En cas d'échec : Obligatoire sous le champ signifie que le commentaire est vide.
Retirer votre propre demande
- L'annuler. Une demande devenue inutile ne doit pas rester dans la boîte des approbateurs. Dans le menu de ligne, cliquez sur Annuler, saisissez une Raison d'au moins 3 caractères, puis cliquez sur Annuler. Résultat attendu : le message Terminé et le statut Annulé. En cas d'échec :
forbidden(403) signifie que vous n'êtes ni le demandeur, nitenant_admin, nisecurity_officer.
Dépannage
| Symptôme | Cause | Correction |
|---|---|---|
separation_of_duties (403) : « Séparation des tâches : le demandeur ne peut pas approuver sa propre demande. » | Vous avez créé la demande, ou vous figurez dans excluded_approvers. | Un autre approbateur doit décider. |
forbidden (403) avec required_roles | Vos rôles ne figurent pas parmi les rôles approbateurs de la demande. | Sollicitez un approbateur qui détient l'un des rôles listés. |
already_decided (409) : « Vous avez déjà statué sur cette approbation. » | Vous avez déjà enregistré une décision sur cette demande. | Attendez que les autres approbateurs atteignent le quorum. |
approval_closed (409) : « L'approbation est déjà clôturée (...). » | La demande a été décidée, annulée ou a expiré entre-temps. | Cliquez sur Actualiser ; une nouvelle demande est nécessaire pour retenter l'action. |
| Le statut reste En attente après Approuver | Le quorum demande d'autres approbations. | Lisez quorum dans le panneau de détail et sollicitez d'autres approbateurs. |
validation_error (422) sur Annuler | La raison fait moins de 3 caractères. | Écrivez une raison plus longue. |