diff --git a/documentation/SQL/release_1.1.0.sql b/documentation/SQL/release_1.1.0.sql
index 941964945317937161ba61e822b209f84e6d0d2b..ac835934a7b30cefe59b8ea1eac21eac7e5c8c9a 100644
--- a/documentation/SQL/release_1.1.0.sql
+++ b/documentation/SQL/release_1.1.0.sql
@@ -32,3 +32,10 @@ FROM d
          JOIN unicaen_parametre_categorie cp ON cp.CODE = 'GLOBAL';
 
 
+INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
+WITH d(code, lib, ordre) AS (
+    select 'inscription_annuler', 'Annuler l''inscription', 60
+)
+SELECT cp.id, d.code, d.lib, d.ordre
+FROM d
+JOIN unicaen_privilege_categorie cp ON cp.CODE = 'inscription';
\ No newline at end of file
diff --git a/module/Formation/config/merged/inscription.config.php b/module/Formation/config/merged/inscription.config.php
index 3c266aac3550da6305914d1cbda33a2e154bd894..54236453437c412d41bfeb2aa5efc0f6911bdaf1 100644
--- a/module/Formation/config/merged/inscription.config.php
+++ b/module/Formation/config/merged/inscription.config.php
@@ -46,6 +46,7 @@ return [
                     [
                         'privileges' => [
                             InscriptionPrivileges::INSCRIPTION_AFFICHER,
+                            InscriptionPrivileges::INSCRIPTION_ANNULER,
                         ],
                         'resources' => ['Inscription'],
                         'assertion' => InscriptionAssertion::class
@@ -140,13 +141,21 @@ return [
                     'controller' => InscriptionController::class,
                     'action' => [
                         'inscription',
-                        'desinscription',
                     ],
                     'roles' => [
                         'Agent',
                         'Stagiaire externe',
                     ],
                 ],
+                [
+                    'controller' => InscriptionController::class,
+                    'action' => [
+                        'desinscription',
+                    ],
+                    'privileges' => [
+                        InscriptionPrivileges::INSCRIPTION_ANNULER,
+                    ],
+                ],
                 [
                     'controller' => InscriptionController::class,
                     'action' => [
diff --git a/module/Formation/src/Formation/Assertion/InscriptionAssertion.php b/module/Formation/src/Formation/Assertion/InscriptionAssertion.php
index 478d46b85505d4f6d99c67bf3daa6c28d02c316b..dde38523a1c16b955914cd6d81c74d8cc95dcc0e 100644
--- a/module/Formation/src/Formation/Assertion/InscriptionAssertion.php
+++ b/module/Formation/src/Formation/Assertion/InscriptionAssertion.php
@@ -9,6 +9,8 @@ use Agent\Service\Agent\AgentServiceAwareTrait;
 use Agent\Service\AgentValidateur\AgentValidateurServiceAwareTrait;
 use Agent\Provider\Privilege\AgentPrivileges;
 use Formation\Entity\Db\Inscription;
+use Formation\Provider\Etat\InscriptionEtats;
+use Formation\Provider\Etat\SessionEtats;
 use Formation\Provider\Privilege\InscriptionPrivileges;
 use Formation\Provider\Role\FormationRoles;
 use Formation\Service\Inscription\InscriptionServiceAwareTrait;
@@ -64,10 +66,16 @@ class InscriptionAssertion extends AbstractAssertion
 
         if (!$this->getPrivilegeService()->checkPrivilege($privilege, $role)) return false;
 
+        $session = $entity->getSession();
+        $sessionEtat = $session->getEtatActif()?->getType()->getCode();
 
         switch ($privilege) {
             case InscriptionPrivileges::INSCRIPTION_AFFICHER:
                 return $this->isScopeCompatible($entity, $user, $role);
+            case InscriptionPrivileges::INSCRIPTION_ANNULER:
+                if (!$this->isScopeCompatible($entity, $user, $role)) return false;
+                if (!in_array($role->getRoleId(), [RolesProvider::ROLE_AGENT, FormationRoles::STAGIAIRE_EXTERNE])) return true;
+                return ($sessionEtat AND in_array($sessionEtat, SessionEtats::ETATS_INSCRIPTION_ANNULABLE));
         }
 
         return true;
diff --git a/module/Formation/src/Formation/Provider/Etat/SessionEtats.php b/module/Formation/src/Formation/Provider/Etat/SessionEtats.php
index 34b3187fa35e8f2245548fc9237a22f49978ed4c..4fc070c8e6ca239b9423e13f68d31ec83be092a1 100644
--- a/module/Formation/src/Formation/Provider/Etat/SessionEtats.php
+++ b/module/Formation/src/Formation/Provider/Etat/SessionEtats.php
@@ -32,4 +32,10 @@ class SessionEtats {
         SessionEtats::ETAT_SESSION_ANNULEE,
         SessionEtats::ETAT_CLOTURE_INSTANCE,
     ];
+
+    const ETATS_INSCRIPTION_ANNULABLE = [
+        SessionEtats::ETAT_CREATION_EN_COURS,
+        SessionEtats::ETAT_INSCRIPTION_OUVERTE,
+        SessionEtats::ETAT_INSCRIPTION_FERMEE,
+    ];
 }
\ No newline at end of file
diff --git a/module/Formation/src/Formation/Provider/Privilege/InscriptionPrivileges.php b/module/Formation/src/Formation/Provider/Privilege/InscriptionPrivileges.php
index 298106ff541d4a0bbc2c56084fffadb0ac19e71f..b26efecfd920dbdc66397a6b8593b7ace527f6c5 100644
--- a/module/Formation/src/Formation/Provider/Privilege/InscriptionPrivileges.php
+++ b/module/Formation/src/Formation/Provider/Privilege/InscriptionPrivileges.php
@@ -7,5 +7,6 @@ use UnicaenPrivilege\Provider\Privilege\Privileges;
 class InscriptionPrivileges extends Privileges
 {
     const INSCRIPTION_AFFICHER = 'inscription-inscription_afficher';
+    const INSCRIPTION_ANNULER = 'inscription-inscription_annuler';
     const INSCRIPTION_ENQUETE = 'inscription-inscription_enquete';
 }
diff --git a/module/Formation/view/formation/formation-instance-inscrit/inscriptions.phtml b/module/Formation/view/formation/formation-instance-inscrit/inscriptions.phtml
index 124ddf903fe51a7fd986f6470241cd5be87a5ad5..09f8b1b83ca51754d7374c91f8a7b648b076d9d7 100644
--- a/module/Formation/view/formation/formation-instance-inscrit/inscriptions.phtml
+++ b/module/Formation/view/formation/formation-instance-inscrit/inscriptions.phtml
@@ -18,6 +18,7 @@ use Agent\Entity\Db\Agent;
 use DemandeExterne\Entity\Db\DemandeExterne;
 use Formation\Entity\Db\Inscription;
 use Formation\Provider\Etat\SessionEtats;
+use Formation\Provider\Privilege\InscriptionPrivileges;
 
 ?>
 
@@ -64,13 +65,15 @@ use Formation\Provider\Etat\SessionEtats;
                         <strong>Inscrit en liste <?php echo $inscription->getListe(); ?></strong>
                     </div>
                     <div class="col-md-4">
+                        <?php if ($this->isAllowed($inscription, InscriptionPrivileges::INSCRIPTION_ANNULER)) : ?>
                         <a
-                            <?php /** @see \Formation\Controller\FormationInstanceInscritController::desinscriptionAction() */ ?>
+                            <?php /** @see \Formation\Controller\InscriptionController::desinscriptionAction() */ ?>
                                 href="<?php echo $this->url('inscription/annuler-inscription', ['inscription' => $inscription->getId()], [], true); ?>"
                                 class="btn btn-danger ajax-modal" data-event="modification"
                         >
                             <span class="icon icon-unchecked"> J'annule mon inscription </span>
                         </a>
+                        <?php endif; ?>
                         <?php if ($instance->isEtatActif(SessionEtats::ETAT_FORMATION_CONVOCATION) && $inscription->getListe() === Inscription::PRINCIPALE) : ?>
                             <br/>
                             <a