diff --git a/config/merged/tableau-de-bord.config.php b/config/merged/tableau-de-bord.config.php
index 312dfd9c80048d1ec635da0c8e367705f6b11a10..d6e912a3b26f7ef86c140aa46ff52737ed875b86 100644
--- a/config/merged/tableau-de-bord.config.php
+++ b/config/merged/tableau-de-bord.config.php
@@ -21,6 +21,11 @@ return [
                     'controller' => TableauDeBordController::class,
                     'action' => [
                         'index',
+                        'ajouter',
+                        'modifier',
+                        'ajouter-indicateur',
+                        'retirer-indicateur',
+                        'supprimer',
                         'afficher',
                     ],
                     'privileges' => [
@@ -45,6 +50,16 @@ return [
                 ],
                 'may_terminate' => true,
                 'child_routes' => [
+                    'ajouter' => [
+                        'type'  => Literal::class,
+                        'options' => [
+                            'route'    => '/ajouter',
+                            'defaults' => [
+                                'controller' => TableauDeBordController::class,
+                                'action'     => 'ajouter',
+                            ],
+                        ],
+                    ],
                     'afficher' => [
                         'type'  => Segment::class,
                         'options' => [
@@ -54,8 +69,48 @@ return [
                                 'action'     => 'afficher',
                             ],
                         ],
-                        'may_terminate' => true,
                     ],
+                    'modifier' => [
+                        'type'  => Segment::class,
+                        'options' => [
+                            'route'    => '/modifier/:tableau-de-bord',
+                            'defaults' => [
+                                'controller' => TableauDeBordController::class,
+                                'action'     => 'modifier',
+                            ],
+                        ],
+                    ],
+                    'supprimer' => [
+                        'type'  => Segment::class,
+                        'options' => [
+                            'route'    => '/supprimer/:tableau-de-bord',
+                            'defaults' => [
+                                'controller' => TableauDeBordController::class,
+                                'action'     => 'supprimer',
+                            ],
+                        ],
+                    ],
+                    'ajouter-indicateur' => [
+                        'type'  => Segment::class,
+                        'options' => [
+                            'route'    => '/ajouter-indicateur/:tableau-de-bord',
+                            'defaults' => [
+                                'controller' => TableauDeBordController::class,
+                                'action'     => 'ajouter-indicateur',
+                            ],
+                        ],
+                    ],
+                    'retirer-indicateur' => [
+                        'type'  => Segment::class,
+                        'options' => [
+                            'route'    => '/retirer-indicateur/:tableau-de-bord/:indicateur',
+                            'defaults' => [
+                                'controller' => TableauDeBordController::class,
+                                'action'     => 'retirer-indicateur',
+                            ],
+                        ],
+                    ],
+
                 ],
             ],
         ],
diff --git a/documentation/02_privileges.sql b/documentation/02_privileges.sql
index e2ea15debfbf9c5a177d89853afe434f106962dc..0b1d59092626427a9c4e3c3e5f6f90283c32b416 100644
--- a/documentation/02_privileges.sql
+++ b/documentation/02_privileges.sql
@@ -20,4 +20,17 @@ WITH d(code, lib, ordre) AS (
 )
 SELECT cp.id, d.code, d.lib, d.ordre
 FROM d
-         JOIN unicaen_privilege_categorie cp ON cp.CODE = 'abonnement';
\ No newline at end of file
+         JOIN unicaen_privilege_categorie cp ON cp.CODE = 'abonnement';
+
+
+INSERT INTO unicaen_privilege_categorie (code, libelle, ordre, namespace)
+VALUES ('tableaudebord', 'Gestions des abonnement', 810, 'UnicaenIndicateur\Provider\Privilege');
+INSERT INTO unicaen_privilege_privilege(CATEGORIE_ID, CODE, LIBELLE, ORDRE)
+WITH d(code, lib, ordre) AS (
+    SELECT 'afficher-tableaudebord', 'Afficher un tableau de bord', 4   UNION
+    SELECT 'editer-tableaudebord', 'Éditer un tableau de bord', 5   UNION
+    SELECT 'detruire-tableaudebord', 'Effacer un tableau de bord', 6
+)
+SELECT cp.id, d.code, d.lib, d.ordre
+FROM d
+JOIN unicaen_privilege_categorie cp ON cp.CODE = 'tableaudebord';
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Controller/IndicateurController.php b/src/UnicaenIndicateur/Controller/IndicateurController.php
index 2597969e8096752ee692831b5d9c0a236c839a0f..2f8de0fe011e8f7ec06873c00c59b2b77c72ecab 100644
--- a/src/UnicaenIndicateur/Controller/IndicateurController.php
+++ b/src/UnicaenIndicateur/Controller/IndicateurController.php
@@ -57,6 +57,9 @@ class IndicateurController extends AbstractActionController {
     {
         $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
         $this->getIndicateurService()->refresh($indicateur);
+
+        $retour = $this->params()->fromQuery('retour');
+        if ($retour) return $this->redirect()->toUrl($retour);
         return $this->redirect()->toRoute('indicateur/afficher', ['indicateur' => $indicateur->getId()], [], true);
     }
 
diff --git a/src/UnicaenIndicateur/Controller/TableauDeBordController.php b/src/UnicaenIndicateur/Controller/TableauDeBordController.php
index 9f8fe19db09eaf274197afd92a3133bf1b30b04a..8526578f72787b216e2f50a1ab301bd30ee5d619 100644
--- a/src/UnicaenIndicateur/Controller/TableauDeBordController.php
+++ b/src/UnicaenIndicateur/Controller/TableauDeBordController.php
@@ -2,13 +2,19 @@
 
 namespace UnicaenIndicateur\Controller;
 
+use Laminas\Http\Response;
 use Laminas\Mvc\Controller\AbstractActionController;
 use Laminas\View\Model\ViewModel;
+use UnicaenIndicateur\Entity\Db\TableauDeBord;
+use UnicaenIndicateur\Form\TableauDeBord\TableauDeBordFormAwareTrait;
+use UnicaenIndicateur\Service\Indicateur\IndicateurServiceAwareTrait;
 use UnicaenIndicateur\Service\TableauDeBord\TableauDeBordServiceAwareTrait;
 
 class TableauDeBordController extends AbstractActionController
 {
+    use IndicateurServiceAwareTrait;
     use TableauDeBordServiceAwareTrait;
+    use TableauDeBordFormAwareTrait;
 
     public function indexAction() : ViewModel
     {
@@ -27,4 +33,114 @@ class TableauDeBordController extends AbstractActionController
             'tableau' => $tableau,
         ]);
     }
+
+    public function ajouterAction() : ViewModel
+    {
+        $tableau = new TableauDeBord();
+
+        $form = $this->getTableauDeBordForm();
+        $form->setAttribute('action', $this->url()->fromRoute('tableau-de-bord/ajouter', [], [], true));
+        $form->bind($tableau);
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+
+            if ($form->isValid()) {
+                $this->getTableauDeBordService()->create($tableau);
+            }
+        }
+
+        $vm = new ViewModel([
+            'title' => "Création d'un tableau de bord",
+            'form' => $form,
+        ]);
+        $vm->setTemplate('unicaen-indicateur/default/default-form');
+        return $vm;
+    }
+
+    public function modifierAction() : ViewModel
+    {
+        $tableau = $this->getTableauDeBordService()->getRequestedTableauDeBord($this);
+
+        $form = $this->getTableauDeBordForm();
+        $form->setAttribute('action', $this->url()->fromRoute('tableau-de-bord/modifier', ['tableau-de-bord' => $tableau->getId()], [], true));
+        $form->bind($tableau);
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            $form->setData($data);
+            if ($form->isValid()) {
+                $this->getTableauDeBordService()->update($tableau);
+            }
+        }
+
+        $vm = new ViewModel([
+            'title' => "Modification des informations du tableau de bord",
+            'form' => $form,
+        ]);
+        $vm->setTemplate('unicaen-indicateur/default/default-form');
+        return $vm;
+    }
+
+    public function supprimerAction() : ViewModel
+    {
+        $tableau = $this->getTableauDeBordService()->getRequestedTableauDeBord($this);
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+            if ($data["reponse"] === "oui") $this->getTableauDeBordService()->delete($tableau);
+            exit();
+        }
+
+        $vm = new ViewModel();
+        if ($tableau !== null) {
+            $vm->setTemplate('application/default/confirmation');
+            $vm->setVariables([
+                'title' => "Suppression du tableau de bord [" . $tableau->getTitre() . "]",
+                'text' => "La suppression est définitive êtes-vous sûr·e de vouloir continuer ?",
+                'action' => $this->url()->fromRoute('tableau-de-bord/supprimer', ["tableau-de-bord" => $tableau->getId()], [], true),
+            ]);
+        }
+        return $vm;
+    }
+
+    /** Gestion des indicateurs  ****************************************************************/
+
+    public function ajouterIndicateurAction() : ViewModel
+    {
+        $tableau = $this->getTableauDeBordService()->getRequestedTableauDeBord($this);
+        $indicateurs = $this->getIndicateurService()->getIndicateurs();
+
+        $request = $this->getRequest();
+        if ($request->isPost()) {
+            $data = $request->getPost();
+
+            $indicateur = $this->getIndicateurService()->getIndicateur($data['indicateur']);
+            if ($indicateur) {
+                $tableau->addIndicateur($indicateur);
+                $this->getTableauDeBordService()->update($tableau);
+            }
+        }
+
+        return new ViewModel([
+            'title' => "Ajout d'un indicateur au tableau de bord",
+            'tableau' => $tableau,
+            'indicateurs' => $indicateurs,
+        ]);
+    }
+
+    public function retirerIndicateurAction() : Response
+    {
+        $tableau = $this->getTableauDeBordService()->getRequestedTableauDeBord($this);
+        $indicateur = $this->getIndicateurService()->getRequestedIndicateur($this);
+
+        $tableau->removeIndicateur($indicateur);
+        $this->getTableauDeBordService()->update($tableau);
+
+        return $this->redirect()->toRoute('tableau-de-bord/afficher', ['tableau-de-bord' => $tableau->getId()], [], true);
+    }
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Controller/TableauDeBordControllerFactory.php b/src/UnicaenIndicateur/Controller/TableauDeBordControllerFactory.php
index d76c8b9c1ff34be6a567f995a9388de9ce59a7a3..8185d7ba783ce4d67be392984a65be48fa99acc0 100644
--- a/src/UnicaenIndicateur/Controller/TableauDeBordControllerFactory.php
+++ b/src/UnicaenIndicateur/Controller/TableauDeBordControllerFactory.php
@@ -6,6 +6,8 @@ use Psr\Container\ContainerExceptionInterface;
 use Psr\Container\ContainerInterface;
 use Psr\Container\NotFoundExceptionInterface;
 use UnicaenIndicateur\Entity\Db\TableauDeBord;
+use UnicaenIndicateur\Form\TableauDeBord\TableauDeBordForm;
+use UnicaenIndicateur\Service\Indicateur\IndicateurService;
 use UnicaenIndicateur\Service\TableauDeBord\TableauDeBordService;
 
 class TableauDeBordControllerFactory {
@@ -19,11 +21,18 @@ class TableauDeBordControllerFactory {
     public function __invoke(ContainerInterface $container) : TableauDeBordController
     {
         /**
+         * @var IndicateurService $indicateurService
          * @var TableauDeBordService $tableauService
+         * @var TableauDeBordForm $tableauForm
          */
+        $indicateurService = $container->get(IndicateurService::class);
         $tableauService = $container->get(TableauDeBordService::class);
+        $tableauForm = $container->get('FormElementManager')->get(TableauDeBordForm::class);
 
         $controller = new TableauDeBordController();
+        $controller->setIndicateurService($indicateurService);
+        $controller->setTableauDeBordForm($tableauForm);
+        $controller->setTableauDeBordService($tableauService);
         return $controller;
     }
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Entity/Db/Mapping/UnicaenIndicateur.Entity.Db.TableauDeBord.dcm.xml b/src/UnicaenIndicateur/Entity/Db/Mapping/UnicaenIndicateur.Entity.Db.TableauDeBord.dcm.xml
index a666516383316457472ca23dc49473eb27aec7db..8e9b59618a6897a1a70b5a8fad678f26935f28d7 100644
--- a/src/UnicaenIndicateur/Entity/Db/Mapping/UnicaenIndicateur.Entity.Db.TableauDeBord.dcm.xml
+++ b/src/UnicaenIndicateur/Entity/Db/Mapping/UnicaenIndicateur.Entity.Db.TableauDeBord.dcm.xml
@@ -16,7 +16,7 @@
                     <join-column name="tableau_id" referenced-column-name="id"/>
                 </join-columns>
                 <inverse-join-columns>
-                    <join-column name="indicateur_id" referenced-column-name="ID"/>
+                    <join-column name="indicateur_id" referenced-column-name="id"/>
                 </inverse-join-columns>
             </join-table>
         </many-to-many>
diff --git a/src/UnicaenIndicateur/Entity/Db/TableauDeBord.php b/src/UnicaenIndicateur/Entity/Db/TableauDeBord.php
index 36a730feb8bcf94a43656a734679b5be683c31a0..93cf80a4f3a18b2685a7567aafb092b5387be194 100644
--- a/src/UnicaenIndicateur/Entity/Db/TableauDeBord.php
+++ b/src/UnicaenIndicateur/Entity/Db/TableauDeBord.php
@@ -72,4 +72,9 @@ class TableauDeBord {
     {
         $this->indicateurs->removeElement($indicateur);
     }
+
+    public function hasIndicateur(Indicateur $indicateur) : bool
+    {
+        return $this->indicateurs->contains($indicateur);
+    }
 }
\ No newline at end of file
diff --git a/src/UnicaenIndicateur/Form/TableauDeBord/TableauDeBordHydrator.php b/src/UnicaenIndicateur/Form/TableauDeBord/TableauDeBordHydrator.php
index 48aff180dbe154fe33913dbc315f6904cd00fa94..4f8754b700592e739e94e48ae229d86149eb9a45 100644
--- a/src/UnicaenIndicateur/Form/TableauDeBord/TableauDeBordHydrator.php
+++ b/src/UnicaenIndicateur/Form/TableauDeBord/TableauDeBordHydrator.php
@@ -15,8 +15,8 @@ class TableauDeBordHydrator implements HydratorInterface {
     {
         $data = [
             'libelle' => $object->getTitre(),
-            'description' => $object->getTitre(),
-            'nb_colonne' => $object->getTitre(),
+            'description' => $object->getDescription(),
+            'nb_colonne' => $object->getNbColumn(),
         ];
         return $data;
     }
diff --git a/src/UnicaenIndicateur/Provider/Privilege/TableaudebordPrivileges.php b/src/UnicaenIndicateur/Provider/Privilege/TableaudebordPrivileges.php
new file mode 100644
index 0000000000000000000000000000000000000000..a840756017133df621dc637f5049283328f3c39b
--- /dev/null
+++ b/src/UnicaenIndicateur/Provider/Privilege/TableaudebordPrivileges.php
@@ -0,0 +1,12 @@
+<?php
+
+namespace UnicaenIndicateur\Provider\Privilege;
+
+use UnicaenPrivilege\Provider\Privilege\Privileges;
+
+class TableaudebordPrivileges extends Privileges
+{
+    const AFFICHER = 'tableaudebord-afficher';
+    const EDITER = 'tableaudebord-editer';
+    const DETRUIRE = 'tableaudebord-detruire';
+}
\ No newline at end of file
diff --git a/view/unicaen-indicateur/indicateur/index.phtml b/view/unicaen-indicateur/indicateur/index.phtml
index 8e4d3f95aeb6dcbc9e48a4b73089c06f5293d81f..30d72e4cd2b955b74cf2cdcafec1c2a24b6ce1d0 100644
--- a/view/unicaen-indicateur/indicateur/index.phtml
+++ b/view/unicaen-indicateur/indicateur/index.phtml
@@ -8,15 +8,31 @@
 use UnicaenIndicateur\Entity\Db\Abonnement;
 use UnicaenIndicateur\Entity\Db\Indicateur;
 use UnicaenIndicateur\Provider\Privilege\IndicateurPrivileges;
+use UnicaenIndicateur\Provider\Privilege\TableaudebordPrivileges;
 
 $canVoir    = $this->isAllowed(IndicateurPrivileges::getResourceId(IndicateurPrivileges::AFFICHER));
 $canEditer  = $this->isAllowed(IndicateurPrivileges::getResourceId(IndicateurPrivileges::EDITER));
 $canDetruire = $this->isAllowed(IndicateurPrivileges::getResourceId(IndicateurPrivileges::DETRUIRE));
+
+$canTableaux = $this->isAllowed(TableaudebordPrivileges::getResourceId(TableaudebordPrivileges::EDITER));
 ?>
 
-<h1 class="page-header">
-    Indicateurs
-</h1>
+<div class="row">
+    <div class="col-md-9">
+        <h1 class="page-header">
+            Indicateurs
+        </h1>
+    </div>
+    <div class="col-md-3">
+        <?php if ($canTableaux) : ?>
+            <?php /** @see \UnicaenIndicateur\Controller\TableauDeBordController::indexAction() */ ?>
+            <a href="<?php echo  $this->url('tableau-de-bord',[], [], true); ?>" class="btn btn-secondary">
+                <span class="icon icon-lister"></span>
+                Accéder aux tableaux de bord
+            </a>
+        <?php endif; ?>
+    </div>
+</div>
 
 <div class="main">
 
diff --git a/view/unicaen-indicateur/tableau-de-bord/afficher.phtml b/view/unicaen-indicateur/tableau-de-bord/afficher.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..6f4f6baa3a5454e7d389bf3b52a6773a91d0d6ff
--- /dev/null
+++ b/view/unicaen-indicateur/tableau-de-bord/afficher.phtml
@@ -0,0 +1,110 @@
+<?php
+
+use UnicaenIndicateur\Entity\Db\TableauDeBord;
+use UnicaenIndicateur\Provider\Privilege\IndicateurPrivileges;
+use UnicaenIndicateur\Provider\Privilege\TableaudebordPrivileges;
+
+/**
+ * @see \UnicaenIndicateur\Controller\TableauDeBordController::afficherAction()
+ * @var TableauDeBord $tableau
+ */
+
+$this->headTitle($tableau?$tableau->getTitre():"Tableau de bord supprimé");
+
+$canIndex = $this->isAllowed(TableaudebordPrivileges::getResourceId(TableaudebordPrivileges::EDITER));
+$canGerer = $this->isAllowed(TableaudebordPrivileges::getResourceId(TableaudebordPrivileges::EDITER));
+$canSupprimer = $this->isAllowed(TableaudebordPrivileges::getResourceId(TableaudebordPrivileges::DETRUIRE));
+
+$canAfficherIndicateur = $this->isAllowed(IndicateurPrivileges::getResourceId(IndicateurPrivileges::AFFICHER));
+
+$width = 12 / ((int) ($tableau?$tableau->getNbColumn():1));
+?>
+
+<?php if ($tableau === null) : ?>
+    <div class="alert alert-danger">
+        Tableau de bord supprimé
+    </div>
+<?php else : ?>
+    <div class="row">
+        <div class="col-md-9">
+            <h1 class="page-header">
+                <?php echo $tableau->getTitre(); ?>
+                <?php if ($tableau->getDescription()) : ?>
+                    <span class="icon icon-information" title="<?php echo $tableau->getDescription(); ?>"
+                          data-bs-toggle="tooltip" data-bs-html="true"></span>
+                <?php endif; ?>
+            </h1>
+        </div>
+        <div class="col-md-3">
+            <?php if ($canIndex) : ?>
+                <?php /** @see \UnicaenIndicateur\Controller\TableauDeBordController::indexAction() */ ?>
+                <a href="<?php echo $this->url('tableau-de-bord', [], [], true); ?>"
+                    class="btn btn-secondary">
+                    <span class="icon icon-lister"></span>
+                    Accéder aux tableaux de bord
+                </a>
+            <?php endif;?>
+        </div>
+    </div>
+
+    <?php if ($canGerer) : ?>
+        <?php /** @see \UnicaenIndicateur\Controller\TableauDeBordController::modifierAction() */?>
+        <a href="<?php echo $this->url('tableau-de-bord/modifier', ['tableau-de-bord' => $tableau->getId()], [], true); ?>" class="btn btn-primary ajax-modal" data-event="modification">
+            <span class="icon icon-modifier"></span>
+            Modifier les informations
+        </a>
+        <?php /** @see \UnicaenIndicateur\Controller\TableauDeBordController::ajouterIndicateurAction()  */?>
+        <a href="<?php echo $this->url('tableau-de-bord/ajouter-indicateur', ['tableau-de-bord' => $tableau->getId()], [], true); ?>" class="btn btn-primary ajax-modal" data-event="modification">
+            <span class="icon icon-ajouter"></span>
+            Ajouter un indicateur
+        </a>
+    <?php endif; ?>
+    <?php if ($canSupprimer) : ?>
+        <a href="<?php echo $this->url("tableau-de-bord/supprimer", ['tableau-de-bord' => $tableau->getId()], [], true); ?>" class="btn btn-danger ajax-modal" data-event="modification">
+            <span class="icon icon-unchecked"></span>
+            Supprimer le tableau de bord
+        </a>
+    <?php endif; ?>
+
+    <div class="row">
+        <?php foreach ($tableau->getIndicateurs() as $indicateur) : ?>
+        <div class="col-md-<?php echo $width; ?>">
+            <div class="row">
+                <div class="col-md-8">
+                    <?php echo $indicateur->getTitre(); ?>
+                </div>
+                <div class="col-md-4">
+                    <?php if ($canAfficherIndicateur) : ?>
+                        <?php /** @see \UnicaenIndicateur\Controller\IndicateurController::rafraichirAction() */?>
+                        <a href="<?php echo $this->url('indicateur/rafraichir', ['indicateur' => $indicateur->getId()],
+                            ["query" => ["retour" => $this->url("tableau-de-bord/afficher", ["tableau-de-bord" => $tableau->getId()], ["force_canonical" => true], true)]], true); ?>" title="Rafraichir l'indicateur">
+                            <span class="icon icon-synchroniser"></span></a>
+                        <?php /** @see \UnicaenIndicateur\Controller\IndicateurController::afficherAction() */?>
+                        <a href="<?php echo $this->url('indicateur/afficher', ['indicateur' => $indicateur->getId()], [], true); ?>" title="Afficher l'indicateur">
+                            <span class="icon icon-voir"></span></a>
+                        <?php /** @see \UnicaenIndicateur\Controller\IndicateurController::exporterAction() */?>
+                        <a href="<?php echo $this->url('indicateur/exporter', ['indicateur' => $indicateur->getId()], [], true); ?>" title="Exporter l'indicateur">
+                            <span class="icon icon-csv"></span></a>
+                    <?php endif; ?>
+                    <?php if ($canGerer) : ?>
+                        <?php /** @see \UnicaenIndicateur\Controller\TableauDeBordController::retirerIndicateurAction() */ ?>
+                        <a href="<?php echo $this->url("tableau-de-bord/retirer-indicateur",["tableau-de-bord" => $tableau->getId(), "indicateur" => $indicateur->getId()],[], true); ?>" title="Retirer cet indicateur du tableau de bord">
+                            <span class="icon icon-unchecked text-danger"></span></a>
+                    <?php endif; ?>
+                </div>
+            </div>
+
+            <span class="todo">Faire le view helper des données des indicateurs </span>
+        </div>
+        <?php endforeach; ?>
+    </div>
+<?php endif; ?>
+
+<script>
+    $(function() {
+        $("body").on("modification", function (event) {
+            event.div.modal('hide');
+            window.location.reload();
+        });
+    });
+</script>
\ No newline at end of file
diff --git a/view/unicaen-indicateur/tableau-de-bord/ajouter-indicateur.phtml b/view/unicaen-indicateur/tableau-de-bord/ajouter-indicateur.phtml
new file mode 100644
index 0000000000000000000000000000000000000000..4974d6ae5fe448ca90bb5c0ef1da3a393faaa021
--- /dev/null
+++ b/view/unicaen-indicateur/tableau-de-bord/ajouter-indicateur.phtml
@@ -0,0 +1,49 @@
+<?php
+
+use UnicaenIndicateur\Entity\Db\Indicateur;
+use UnicaenIndicateur\Entity\Db\TableauDeBord;
+
+/**
+ * @see \UnicaenIndicateur\Controller\TableauDeBordController::ajouterIndicateurAction()
+ * @var TableauDeBord $tableau
+ * @var Indicateur[] $indicateurs
+ */
+
+$in = []; $out = [];
+foreach ($indicateurs as $indicateur) {
+    if ($tableau->hasIndicateur($indicateur)) {
+        $in[] = $indicateur;
+    } else {
+        $out[] = $indicateur;
+    }
+}
+
+?>
+
+<?php if (!empty($in)) : ?>
+    <div class="alert alert-info">
+        <span class="icon icon-information"></span>
+        Liste des indicateurs déjà présents dans le tableau de bord :
+        <?php
+            $liste = array_map(function (Indicateur $a) { return $a->getTitre();}, $in);
+            echo implode(", ",$liste).".";
+        ?>
+    </div>
+<?php endif; ?>
+
+<form method="post" action="<?php echo $this->url('tableau-de-bord/ajouter-indicateur', ["tableu-de-bord" => $tableau->getId()], [], true); ?>">
+    <label for="indicateur">Liste des indicateurs disponibles : </label><br>
+    <select id="indicateur" name="indicateur" class="selectpicker" data-live-search="true">
+        <?php foreach ($out as $indicateur) : ?>
+            <option value="<?php echo $indicateur->getId(); ?>">
+                <?php echo $indicateur->getTitre(); ?>
+            </option>
+        <?php endforeach; ?>
+    </select>
+    <br>
+<input type="submit" class="btn btn-primary" value="Ajouter l'indicateur">
+</form>
+
+<script>
+    $('select.selectpicker').selectpicker();
+</script>
\ No newline at end of file
diff --git a/view/unicaen-indicateur/tableau-de-bord/index.phtml b/view/unicaen-indicateur/tableau-de-bord/index.phtml
index 5c013815e29abede3e1c945afbff27e0ab400e73..3cd14b06156ebaa3e8d1679d3a8e848bf2044bb0 100644
--- a/view/unicaen-indicateur/tableau-de-bord/index.phtml
+++ b/view/unicaen-indicateur/tableau-de-bord/index.phtml
@@ -1,14 +1,22 @@
 <?php
 
 use UnicaenIndicateur\Entity\Db\TableauDeBord;
+use UnicaenIndicateur\Provider\Privilege\IndicateurPrivileges;
+use UnicaenIndicateur\Provider\Privilege\TableaudebordPrivileges;
 
 /**
- * @see \UnicaenIndicateur\Controller\TableauDeBordController::afficherAction()
+ * @see \UnicaenIndicateur\Controller\TableauDeBordController::indexAction()
  * @var TableauDeBord[] $tableaux
  */
 
 $this->headTitle("Index des tableaux de bords");
 
+$canAfficher = $this->isAllowed(TableaudebordPrivileges::getResourceId(TableaudebordPrivileges::AFFICHER));
+$canModifier = $this->isAllowed(TableaudebordPrivileges::getResourceId(TableaudebordPrivileges::EDITER));
+$canGerer = $this->isAllowed(TableaudebordPrivileges::getResourceId(TableaudebordPrivileges::EDITER));;
+$canSupprimer = $this->isAllowed(TableaudebordPrivileges::getResourceId(TableaudebordPrivileges::DETRUIRE));;
+
+$canIndicateurs = $this->isAllowed(IndicateurPrivileges::getResourceId(IndicateurPrivileges::EDITER));
 ?>
 
 <div class="row">
@@ -26,8 +34,9 @@ $this->headTitle("Index des tableaux de bords");
     </div>
 </div>
 
-<a href=""
-    class="ajax-modal btn btn-primary">
+<?php /** @see \UnicaenIndicateur\Controller\TableauDeBordController::ajouterAction() */ ?>
+<a href="<?php echo $this->url("tableau-de-bord/ajouter", [], [], true); ?>"
+    class="ajax-modal btn btn-primary" data-event="modification">
     <span class="icon icon-ajouter"></span>
     Créer un tableau de bord
 </a>
@@ -60,12 +69,33 @@ $this->headTitle("Index des tableaux de bords");
                         <?php echo count($tableau->getIndicateurs()); ?>
                     </td>
                     <td>
-                        <span class="icon icon-voir"></span>
-                        <span class="icon icon-editer"></span>
-                        <span class="icon icon-unchecked text-danger"></span>
+                        <?php if ($canAfficher) : ?>
+                            <a href="<?php echo $this->url('tableau-de-bord/afficher', ['tableau-de-bord' => $tableau->getId()], [], true); ?>">
+                                <span class="icon icon-voir" title="Afficher le tableau de bord"></span></a>
+                        <?php endif; ?>
+                        <?php if ($canModifier) : ?>
+                            <a href="<?php echo $this->url('tableau-de-bord/modifier', ['tableau-de-bord' => $tableau->getId()], [], true); ?>"
+                                class="ajax-modal" data-event="modification">
+                                <span class="icon icon-editer" title="Modifier le tableau de bord"></span></a>
+                        <?php endif; ?>
+                        <?php if ($canSupprimer) : ?>
+                            <a href="<?php echo $this->url('tableau-de-bord/supprimer', ['tableau-de-bord' => $tableau->getId()], [], true); ?>"
+                                class="ajax-modal" data-event="modification">
+                                <span class="icon icon-unchecked text-danger"></span></a>
+                        <?php endif; ?>
                     </td>
                 </tr>
             <?php endforeach; ?>
         </tbody>
     </table>
 <?php endif; ?>
+
+
+<script>
+    $(function() {
+        $("body").on("modification", function (event) {
+            event.div.modal('hide');
+            window.location.reload();
+        });
+    });
+</script>
\ No newline at end of file