- Présentation
- Description
- BiBOARD
- Usage
Guide client — Administration des accès, groupes et matrice de droits
Version : 1.0 • Date : 27/02/2026
Présentation #
Résumé exécutif #
La gestion des droits utilisateurs d’une application web construite avec BiBOARD repose sur plusieurs actions essentielles : intégration des comptes, affectation à des groupes, suspension ou suppression des accès, ainsi que contrôle des droits sur les menus et icônes. Ce document décrit, pas à pas, l’ensemble de cette administration.
Important : cette gestion est strictement applicative et ne modifie pas les droits du Studio BiBOARD.
Vue d’ensemble — Architecture #
Le module repose sur 4 tables principales et une matrice d’habilitation :
| Objet | Rôle |
| SECU_UTILISATEUR | Comptes applicatifs (login, statut, traçabilité). |
| SECU_GROUPE | Groupes fonctionnels (rôles). |
| SECU_GROUPE_UTILISATEUR | Appartenance utilisateur ↔ groupe (activation/désactivation). |
| SECU_MATRICE | Droits d’accès par groupe (TI/TIG, menus, icônes). |
Schéma logique (simplifié) :
Utilisateur (AD / BiBOARD)
↓
SECU_UTILISATEUR
↓
SECU_GROUPE_UTILISATEUR
↓
SECU_GROUPE
↓
SECU_MATRICE
↓
Menus / Icônes / TI / TIG
Cycle de vie utilisateur #
| Action | Effet | Réversible |
| Intégrer | Crée le compte applicatif et rattache à un groupe par défaut. | Oui (via suppression / suspension) |
| Affecter / Déplacer | Change le groupe (périmètre d’accès). | Oui |
| Suspendre | Désactive l’utilisateur et ses rattachements aux groupes. | Oui (Réintégrer) |
| Réintégrer | Réactive l’utilisateur et ses rattachements. | Oui |
| Supprimer | Supprime l’utilisateur et ses rattachements. | Non (sauf restauration sauvegarde) |
Description #
Objectif #
Cette documentation décrit, pas à pas, comment administrer les droits utilisateurs d’une application web construite avec BiBOARD : intégration des comptes, affectation à des groupes, suspension/suppression et contrôle d’accès (menus / icônes).
Important Cette gestion est applicative : elle ne modifie pas les droits du Studio BiBOARD.
Parcours recommandé #
- Ouvrir l’interface d’administration de votre application Web.
- Intégrer les utilisateurs dans l’application.
- Affecter / déplacer les utilisateurs dans les bons groupes.
- Suspendre ou supprimer si nécessaire (avec sécurité GR02).
- Vérifier le résultat dans l’application (menus / icônes).
L’interface d’administration #
Description #
Aperçu #

Intégrer #
Cette section permet d’intégrer de nouveaux utilisateurs pour l’utilisation de l’application. Il est important de noter que cette gestion n’a aucun impact sur l’administration du studio BiBOARD.
Source : référentiel BiBOARD
Cible : Base DATAWAREHOUSE
Supprimer / Suspendre #
Cette section permet de supprimer un utilisateur de l’application et de suspendre les droits d’un utilisateur sans le supprimer de l’application
Source : Base DATAWAREHOUSE
Cible : Base DATAWAREHOUSE
Affecter / Déplacer #
Tout d’abord, cette section permet d’affecter un ou de(s) utilisateur(s) à un ensemble d’éléments de l’application mais aussi de modifier les droits.
Réintégrer / Supprimer (droits) #
En parallèle, il est possible de supprimer les droits du ou de(s) utilisateur(s), ainsi que leur profil associé.
Base de données #
Tables #
SECU_UTILISATEUR #
Description #
Cette table permet de gérer la liste des utilisateurs.
🧩Code #
USE [DSN_DEV]
GO
/****** Object: Table [dbo].[SECU_UTILISATEUR] Script Date: 2/20/2026 9:23:20 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[SECU_UTILISATEUR](
[ID_UTILISATEUR_SYSTEM] [int] IDENTITY(1,1) NOT NULL,
[ID_UTILISATEUR] AS ('UT'+right('0000'+CONVERT([varchar](4),[ID_UTILISATEUR_SYSTEM],0),(4))) PERSISTED,
[UTILISATEUR] [varchar](255) NOT NULL,
[DESCRIPTION] [varchar](255) NULL,
[ACTIF] [int] NOT NULL,
[DATE_FIN_ACTIF] [datetime] NULL,
[USER_SAISIE] [varchar](255) NULL,
PRIMARY KEY CLUSTERED
(
[ID_UTILISATEUR_SYSTEM] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
INSERT [dbo].[SECU_UTILISATEUR] [UTILISATEUR], [DESCRIPTION], [ACTIF], [DATE_FIN_ACTIF], [USER_SAISIE]) VALUES (N'Votre compte BiBOARD', N'Affecté', 1, NULL, NULL)
GO
/*
Note : 'Votre compte BiBOARD' = AWS\jdoe
*/
SECU_GROUPE #
Description #
Cette table permet de définir les groupes.
🧩Code #
USE [DSN_DEV]
GO
/****** Object: Table [dbo].[SECU_GROUPE] Script Date: 2/20/2026 9:28:29 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
SET ARITHABORT ON
GO
CREATE TABLE [dbo].[SECU_GROUPE](
[ID_GROUPE_SYSTEM] [int] IDENTITY(1,1) NOT NULL,
[ID_GROUPE] AS ('GR'+right('00'+CONVERT([varchar](2),[ID_GROUPE_SYSTEM],(0)),(2))) PERSISTED NOT NULL,
[GROUPE] [varchar](255) NOT NULL,
[DESCRIPTION] [varchar](255) NULL,
[ACTIF] [int] NOT NULL,
[DATE_FIN_ACTIF] [datetime] NULL,
[USER_SAISIE] [varchar](255) NULL,
PRIMARY KEY CLUSTERED
(
[ID_GROUPE] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[SECU_GROUPE] ON
GO
INSERT [dbo].[SECU_GROUPE] ([ID_GROUPE_SYSTEM], [GROUPE], [DESCRIPTION], [ACTIF], [DATE_FIN_ACTIF], [USER_SAISIE]) VALUES (1, N'CSE', N'Accès aux BiBOARDs', 1, NULL, NULL)
GO
INSERT [dbo].[SECU_GROUPE] ([ID_GROUPE_SYSTEM], [GROUPE], [DESCRIPTION], [ACTIF], [DATE_FIN_ACTIF], [USER_SAISIE]) VALUES (2, N'Administrateur', N'Accès total', 1, NULL, NULL)
GO
INSERT [dbo].[SECU_GROUPE] ([ID_GROUPE_SYSTEM], [GROUPE], [DESCRIPTION], [ACTIF], [DATE_FIN_ACTIF], [USER_SAISIE]) VALUES (3, N'DSN complet', N'Accès à toutes les applications', 1, NULL, NULL)
GO
INSERT [dbo].[SECU_GROUPE] ([ID_GROUPE_SYSTEM], [GROUPE], [DESCRIPTION], [ACTIF], [DATE_FIN_ACTIF], [USER_SAISIE]) VALUES (4, N'DSN sans Egapro', N'Accès à la BDESE et aux KPI''s', 1, NULL, NULL)
GO
INSERT [dbo].[SECU_GROUPE] ([ID_GROUPE_SYSTEM], [GROUPE], [DESCRIPTION], [ACTIF], [DATE_FIN_ACTIF], [USER_SAISIE]) VALUES (5, N'Egapro', N'Accès à Egapro', 1, NULL, NULL)
GO
SET IDENTITY_INSERT [dbo].[SECU_GROUPE] OFF
GO
SECU_GROUPE_UTILISATEUR #
Description #
Cette table permet d’associer les utilisateurs aux groupes.
🧩Code #
USE [DSN_DEV]
GO
/****** Object: Table [dbo].[SECU_GROUPE_UTILISATEUR] Script Date: 2/20/2026 9:29:31 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[SECU_GROUPE_UTILISATEUR](
[ID_GROUPE] [varchar](10) NOT NULL,
[ID_UTILISATEUR] [varchar](10) NOT NULL,
[ACTIF] [int] NOT NULL,
[DATE_FIN_ACTIF] [datetime] NULL,
[USER_SAISIE] [varchar](255) NULL
) ON [PRIMARY]
GO
INSERT [dbo].[SECU_GROUPE_UTILISATEUR] ([ID_GROUPE], [ID_UTILISATEUR], [ACTIF], [DATE_FIN_ACTIF], [USER_SAISIE]) VALUES (N'GR02', N'Votre ID Utilisateur', 1, NULL, N' Votre compte BiBOARD ')
GO
/*
Note :
'Votre compte BiBOARD' = AWS\jdoe
'Votre ID Utilisateur' = SECU_UTILISATEUR.ID_UTILISATEUR
*/
SECU_MATRICE #
Description #
Cette table permet de gérer la liste des utilisateurs.
🧩Code #
USE [DSN_DEV]
GO
/****** Object: Table [dbo].[SECU_MATRICE] Script Date: 2/20/2026 9:30:13 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[SECU_MATRICE](
[ID_TI] [nvarchar](10) NOT NULL,
[ID_TIG] [nvarchar](10) NULL,
[ID_GR] [nvarchar](10) NULL,
[ACTIF] [int] NULL,
[DATE_FIN_ACTIF] [datetime] NULL
) ON [PRIMARY]
GO
INSERT [dbo].[SECU_MATRICE] ([ID_TI], [ID_TIG], [ID_GR], [ACTIF], [DATE_FIN_ACTIF]) VALUES (N'TI0001', N'TIG0001', N'GR02', NULL, NULL)
GO
INSERT [dbo].[SECU_MATRICE] ([ID_TI], [ID_TIG], [ID_GR], [ACTIF], [DATE_FIN_ACTIF]) VALUES (N'TI0001', N'TIG0001', N'GR03', NULL, NULL)
GO
INSERT [dbo].[SECU_MATRICE] ([ID_TI], [ID_TIG], [ID_GR], [ACTIF], [DATE_FIN_ACTIF]) VALUES (N'TI0001', N'TIG0001', N'GR05', NULL, NULL)
GO
INSERT [dbo].[SECU_MATRICE] ([ID_TI], [ID_TIG], [ID_GR], [ACTIF], [DATE_FIN_ACTIF]) VALUES (N'TI0001', N'TIG0001', N'GR06', NULL, NULL)
GO
INSERT [dbo].[SECU_MATRICE] ([ID_TI], [ID_TIG], [ID_GR], [ACTIF], [DATE_FIN_ACTIF]) VALUES (N'TI0001', N'TIG0001', N'GR07', NULL, NULL)
GO
INSERT [dbo].[SECU_MATRICE] ([ID_TI], [ID_TIG], [ID_GR], [ACTIF], [DATE_FIN_ACTIF]) VALUES (N'TI0002', N'TIG0001', N'GR01', NULL, NULL)
GO
Procédure #
InsertFromRawUserList #
🧩Code #
USE [DSN_DEV]
GO
/****** Object: StoredProcedure [dbo].[InsertFromRawUserList] Script Date: 2/20/2026 9:19:11 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InsertFromRawUserList]
@RawUsers NVARCHAR(MAX) -- La chaîne brute reçue
AS
BEGIN
SET NOCOUNT ON;
-- Étape 1 : Nettoyer et transformer la chaîne
-- Retirer les parenthèses et les guillemets simples
SET @RawUsers = REPLACE(REPLACE(REPLACE(@RawUsers, '(', ''), ')', ''), '''', '');
-- Étape 2 : Insérer dans une table temporaire
DECLARE @Users UserList;
INSERT INTO @Users (UTILISATEUR)
SELECT TRIM(value)
FROM STRING_SPLIT(@RawUsers, ',');
-- Étape 3 : Appeler la procédure pour traiter les utilisateurs
EXEC InsertMultipleUtilisateursEtGroupes_TVP @Users;
END;
Objectif #
Cette procédure stockée est exécutée via un bouton ACTION_SQL et permet de traiter une liste d’utilisateurs provenant d’un composant tableaux simples à sélection multiple (Datasource LOAD_BDESE_ADD_user). Elle commence par nettoyer les données, puis les transforme en une structure exploitable côté SQL Server. Ensuite, elle déclenche une insertion multiple via une autre procédure métier. Enfin, elle fait le lien entre l’interface, qui fournit des chaînes de caractères, et la logique SQL, représentée par une table de valeurs, garantissant ainsi la cohérence des traitements.
Fonctionnement global #
La procédure suit 3 grandes étapes :
Entrée brute (string) → Nettoyage → Transformation en liste → Traitement métier.
Détail des étapes #
Nettoyage de la chaîne reçue #
But : rendre exploitable une valeur transmise depuis l’interface (souvent formatée avec des caractères parasites).
La chaîne reçue peut ressembler à :
(‘user1′,’user2′,’user3’)
Actions réalisées :
Suppression des parenthèses ( et )
Suppression des guillemets simples ‘
Résultat attendu :
user1,user2,user3
Cette étape garantit que la chaîne est compatible avec une découpe via STRING_SPLIT.
Transformation en liste structurée (TVP) #
But : convertir la chaîne en un format tabulaire exploitable par SQL Server.
Création d’une variable de type table @Users (type UserList)
Découpage de la chaîne par virgule
Nettoyage des espaces avec TRIM
Insertion des valeurs dans la table temporaire
Résultat logique :
| UTILISATEUR |
| user1 |
| user2 |
| user3 |
On passe d’un format texte à une liste structurée typée, prête pour un traitement SQL propre.
Appel de la procédure métier #
But : déléguer le traitement réel (insertion, liaison à des groupes, contrôles, etc.) à une procédure spécialisée.
Appel de la procédure InsertMultipleUtilisateursEtGroupes_TVP
Passage de la table de valeurs @Users en paramètre
Cette séparation permet :
- une meilleure lisibilité
- une réutilisabilité de la logique métier
- une maintenance plus simple
Rôle de la procédure dans l’architecture BiBOARD
Cette procédure joue le rôle de “traducteur” entre l’UI BiBOARD et la base SQL :
| Côté BiBOARD | Côté SQL |
| Sélection multiple | Tableau simple multi sélection |
| Bouton ACTION SQL | Procédure InsertFromRawUserList |
| IDs concaténés | Table de valeurs typée (TVP) |
Tableau — Description
Bénéfices de cette approche #
- Compatible avec les boutons ACTION SQL BiBOARD
- Sécurise le format des données
- Centralise le parsing côté SQL
- Permet une vraie insertion multiple propre
- Réutilisable pour d’autres écrans / cas d’usage
Attention Points d’attention #
La chaîne d’entrée doit être cohérente (séparateur ,).
Si les valeurs contiennent des virgules → prévoir un autre séparateur
InsertMultipleUtilisateursEtGroupes_TVP #
🧩Code #
USE [DSN_DEV]
GO
/****** Object: StoredProcedure [dbo].[InsertMultipleUtilisateursEtGroupes_TVP] Script Date: 2/20/2026 9:20:55 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER PROCEDURE [dbo].[InsertMultipleUtilisateursEtGroupes_TVP]
@UserList UserList READONLY
AS
BEGIN
SET NOCOUNT ON;
BEGIN TRANSACTION;
-- Insérer dans SECU_UTILISATEUR et récupérer l'ID généré pour chaque utilisateur
DECLARE @NewID_UTILISATEUR VARCHAR(10);
-- Parcourir les utilisateurs fournis
DECLARE @User VARCHAR(255);
DECLARE UserCursor CURSOR FOR
SELECT UTILISATEUR FROM @UserList;
OPEN UserCursor;
FETCH NEXT FROM UserCursor INTO @User;
WHILE @@FETCH_STATUS = 0
BEGIN
-- Insérer dans SECU_UTILISATEUR
INSERT INTO SECU_UTILISATEUR (UTILISATEUR, DESCRIPTION, ACTIF, DATE_FIN_ACTIF, USER_SAISIE)
VALUES (@User, 'Nouvel utilisateur', 1, NULL, NULL);
-- Récupérer l'ID_UTILISATEUR généré
SET @NewID_UTILISATEUR = 'UT' + RIGHT('0000' + CAST(SCOPE_IDENTITY() AS VARCHAR(4)), 4);
-- Insérer dans SECU_GROUPE_UTILISATEUR
INSERT INTO SECU_GROUPE_UTILISATEUR (ID_GROUPE, ID_UTILISATEUR, ACTIF, DATE_FIN_ACTIF, USER_SAISIE)
VALUES ('GR00', @NewID_UTILISATEUR, 1, NULL, NULL);
FETCH NEXT FROM UserCursor INTO @User;
END;
CLOSE UserCursor;
DEALLOCATE UserCursor;
COMMIT TRANSACTION;
END;
Objectif #
Des son côté, cette procédure stockée a pour but de créer plusieurs utilisateurs en base à partir d’une liste structurée (TVP), puis de les rattacher automatiquement à un groupe par défaut. Elle est pensée pour être appelée par une procédure “intermédiaire” (comme InsertFromRawUserList) déclenchée depuis BiBOARD.
Ainsi, elle gère donc le traitement métier réel de l’insertion multiple.
Fonctionnement global #
Liste d’utilisateurs (TVP) → Création des utilisateurs → Rattachement à un groupe → Commit transaction.
Détail des étapes #
Réception d’une table de valeurs (TVP) #
But : recevoir une liste propre et structurée d’utilisateurs à créer.
Paramètre d’entrée : @UserList (type UserList en READONLY)
Contient une ligne par utilisateur à insérer
Exemple logique :
| UTILISATEUR |
| user1 |
| user2 |
| user3 |
Cette étape évite tout parsing côté métier : la donnée est déjà prête.
Démarrage d’une transaction #
But : garantir l’intégrité des données.
Toutes les insertions sont englobées dans une même transaction
Si une insertion échoue, l’ensemble peut être annulé (logique “tout ou rien”)
C’est crucial pour éviter :
- des utilisateurs sans groupe
- ou des groupes liés à des utilisateurs non créés
Parcours de la liste des utilisateurs #
But : traiter chaque utilisateur individuellement.
Utilisation d’un curseur pour parcourir les lignes de @UserList
Pour chaque utilisateur :
- insertion dans la table des utilisateurs
- récupération de l’identifiant généré
rattachement à un groupe par défaut
On est dans une logique itérative contrôlée.
Insertion dans la table des utilisateurs #
But : créer les comptes utilisateurs en base.
Champs renseignés :
Identifiant fonctionnel (login / nom utilisateur)
Description par défaut
Statut actif
Métadonnées (dates, utilisateur de saisie)
Cette étape centralise la création des comptes côté SQL.
Génération de l’ID utilisateur fonctionnel #
But : créer un identifiant métier exploitable dans les tables de liaison.
Récupération de l’ID technique via SCOPE_IDENTITY()
Transformation en identifiant fonctionnel (ex : UT0001, UT0002, etc.)
Cela permet :
- d’avoir un ID lisible
- de découpler ID technique et ID métier
Rattachement automatique à un groupe #
But : affecter chaque nouvel utilisateur à un groupe par défaut.
Insertion dans la table de liaison SECU_GROUPE_UTILISATEUR
Groupe cible codé en dur (ex : GR00)
Statut actif
Résultat : chaque utilisateur créé est directement opérationnel côté droits.
Validation finale #
But : confirmer toutes les insertions.
Fermeture du curseur
Commit de la transaction
À ce stade, tous les utilisateurs sont créés et rattachés proprement.
Rôle de cette procédure dans l’architecture BiBOARD
| Couche | Rôle |
| Interface BiBOARD | Sélection multiple d’utilisateurs |
| Bouton ACTION SQL | Appel de la procédure intermédiaire |
| Procédure “parser” | Transformation string → TVP |
| Procédure métier | Création utilisateurs + rattachement groupes |
InsertMultipleUtilisateursEtGroupes_TVP est la brique métier centrale.
Bénéfices de l’approche #
- Gère nativement les insertions multiples,
- Garantit la cohérence grâce à la transaction,
- Centralise la logique de création utilisateur,
- Automatisation du rattachement aux groupes,
- Réutilisable depuis d’autres écrans / actions BiBOARD.
BiBOARD #
Requêtes #
🧩LOAD_BDESE_ADD_user #
select
user_login
from
BiBOARD_18_DEV.dbo.user_bb
where
user_login not in ('AWS\Administrator') /* à completer au besoin */
except
select
UTILISATEUR
from SECU_UTILISATEUR
🧩REP_ADM_UTILISATYEUR_GROUPE #
Select
SECU_UTILISATEUR.ID_UTILISATEUR,
SECU_UTILISATEUR.UTILISATEUR,
SECU_GROUPE.GROUPE,
SECU_GROUPE.ID_GROUPE,
SECU_UTILISATEUR.ACTIF As ACTIF_UTILISATEUR
From
SECU_UTILISATEUR
Left Join SECU_GROUPE_UTILISATEUR
On SECU_UTILISATEUR.ID_UTILISATEUR =
SECU_GROUPE_UTILISATEUR.ID_UTILISATEUR
Left Join SECU_GROUPE
On SECU_GROUPE_UTILISATEUR.ID_GROUPE =
SECU_GROUPE.ID_GROUPE
🧩REP_ADM_GROUPE #
Select
ID_GROUPE,
GROUPE,
DESCRIPTION,
ACTIF
From
SECU_GROUPE
🧩REP_ADM_SECU_UTILISATEUR #
Select
SECU_UTILISATEUR.ID_UTILISATEUR,
SECU_UTILISATEUR.UTILISATEUR,
SECU_UTILISATEUR.DESCRIPTION,
SECU_UTILISATEUR.ACTIF,
SECU_UTILISATEUR.DATE_FIN_ACTIF,
SECU_UTILISATEUR.USER_SAISIE
From
SECU_UTILISATEUR
🧩REP_BDESE_PARAMETRES_USERLOGIN #
SELECT :BIBOARDUSERLOGIN as utilisateur
Tableaux de bord #
Visuel des composants du BiBOARD #

Visuel avec numérotation des composants pour la construction du BiDOARD #

ACTION_SQL #
Intégrer #

Composant BiBOARD – Bouton ACTION_SQL « Intégrer »
Rôle #
Le bouton ACTION_SQL “Intégrer” permet de lancer l’insertion multiple d’utilisateurs sélectionnés dans un tableau à choix multiples.Il sert de point d’entrée entre l’interface BiBOARD et la chaîne de traitement SQL.
Fonctionnement #
Lors du clic sur le bouton :
- BiBOARD transmet la liste des utilisateurs sélectionnés sous forme de chaîne brute
- Le bouton exécute la commande SQL suivante :
🧩 Code #
EXEC InsertFromRawUserList "('@[UTILISATEUR]')";
La procédure :
- nettoie la chaîne reçue
- la transforme en liste structurée (TVP)
- déclenche la création des utilisateurs + rattachement aux groupes
Résultat : tous les utilisateurs sélectionnés sont intégrés en base en une seule action.
Rôle dans la chaîne de traitement #
| Étape | Élément |
| Sélection multiple | Tableau BiBOARD |
| Déclenchement | Bouton ACTION_SQL “Intégrer” |
| Parsing | InsertFromRawUserList |
| Traitement métier | InsertMultipleUtilisateursEtGroupes_TVP |
Supprimer #

Règle métier – Groupe d’administration GR02
Contexte #
Le groupe GR02 correspond au groupe d’administration de l’application. En outre, il est impératif qu’au moins un utilisateur actif soit toujours rattaché à ce groupe afin de garantir l’accès à l’administration du système.
Le premier utilisateur administrateur est créé directement en base (initialisation), avant toute utilisation de l’interface BiBOARD.
Règle de sécurité fonctionnelle : une suppression d’utilisateurs est bloquée si elle a pour effet de retirer le dernier utilisateur actif du groupe d’administration GR02.
Mise en œuvre dans le bouton ACTION SQL BiBOARD #
Lors d’une suppression multiple déclenchée depuis l’interface :
Le script SQL :
- compte le nombre d’utilisateurs actifs dans GR02
- identifie si les utilisateurs sélectionnés appartiennent à GR02
🧩 Code #
-- Déclaration des compteurs
DECLARE @témoin int, @témoin2 int
-- @témoin = nombre total d’utilisateurs actifs dans le groupe GR02
SET @témoin = (
SELECT COUNT(ID_UTILISATEUR)
FROM SECU_GROUPE_UTILISATEUR
WHERE ID_GROUPE = 'GR02'
AND ACTIF = 1
)
-- @témoin2 = nombre d’utilisateurs sélectionnés (via BiBOARD)
-- qui appartiennent au groupe GR02
SET @témoin2 = (
SELECT COUNT(SECU_UTILISATEUR.ID_UTILISATEUR)
FROM SECU_GROUPE_UTILISATEUR
INNER JOIN SECU_UTILISATEUR
ON SECU_UTILISATEUR.ID_UTILISATEUR = SECU_GROUPE_UTILISATEUR.ID_UTILISATEUR
WHERE SECU_GROUPE_UTILISATEUR.ID_GROUPE = 'GR02'
AND SECU_UTILISATEUR.ID_UTILISATEUR IN ('@[ID_UTILISATEUR]')
)
-- Condition de sécurité :
-- On autorise la suppression uniquement si le groupe GR02
-- conserve au moins un utilisateur actif après l’opération
IF (
( (@témoin >= 2) OR (@témoin = 1 AND @témoin2 = 0) )
AND (@témoin != @témoin2)
)
BEGIN
-- Suppression des utilisateurs sélectionnés
DELETE FROM SECU_UTILISATEUR
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
-- Suppression des liens groupe/utilisateur associés
DELETE FROM SECU_GROUPE_UTILISATEUR
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
END
Suspendre #

Rôle #
Le bouton ACTION_SQL “Suspendre” permet de désactiver (suspendre) un ou plusieurs utilisateurs sélectionnés dans BiBOARD, tout en appliquant une règle de sécurité :👉 il est interdit de suspendre le dernier administrateur actif du groupe GR02.
Règle métier : le groupe GR02 étant le groupe d’administration, l’action de suspension est bloquée si elle conduit à ce qu’il n’y ait plus aucun administrateur actif.
Fonctionnement #
Lors du clic sur Suspendre :
Le script SQL :
- compte les membres actifs du groupe GR02
- identifie combien parmi la sélection en font partie
L’UPDATE est exécuté uniquement si le groupe conserve au moins un administrateur actif après l’opération
🧩 Code #
-- Déclaration des compteurs
DECLARE @témoin int, @témoin2 int
-- @témoin = nombre total d’utilisateurs actifs dans le groupe d’administration (GR02)
SET @témoin = (
SELECT COUNT(ID_UTILISATEUR)
FROM SECU_GROUPE_UTILISATEUR
WHERE ID_GROUPE = 'GR02'
AND ACTIF = 1
)
-- @témoin2 = nombre d’utilisateurs sélectionnés (dans BiBOARD)
-- qui appartiennent au groupe d’administration GR02
SET @témoin2 = (
SELECT COUNT(SECU_UTILISATEUR.ID_UTILISATEUR)
FROM SECU_GROUPE_UTILISATEUR
INNER JOIN SECU_UTILISATEUR
ON SECU_UTILISATEUR.ID_UTILISATEUR = SECU_GROUPE_UTILISATEUR.ID_UTILISATEUR
WHERE SECU_GROUPE_UTILISATEUR.ID_GROUPE = 'GR02'
AND SECU_UTILISATEUR.ID_UTILISATEUR IN ('@[ID_UTILISATEUR]')
)
-- Condition de sécurité :
-- On autorise la suspension uniquement si le groupe GR02
-- conserve au moins un utilisateur actif après l’opération
IF (
( (@témoin >= 2) OR (@témoin = 1 AND @témoin2 = 0) )
AND (@témoin != @témoin2)
)
BEGIN
-- Suspension des comptes utilisateurs sélectionnés
UPDATE SECU_UTILISATEUR
SET DESCRIPTION = 'Suspendu',
ACTIF = 0,
DATE_FIN_ACTIF = GETDATE(),
USER_SAISIE = '@[USER_SAISIE]'
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
-- Désactivation des rattachements aux groupes
UPDATE SECU_GROUPE_UTILISATEUR
SET ACTIF = 0,
DATE_FIN_ACTIF = GETDATE(),
USER_SAISIE = '@[USER_SAISIE]'
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
END
Affecter / Déplacer #

Rôle #
Le bouton ACTION_SQL “Affecter / Déplacer” permet de changer le groupe d’un ou plusieurs utilisateurs sélectionnés.Comme pour Suspendre / Supprimer, une règle de sécurité empêche de retirer le dernier administrateur actif du groupe GR02.
Règle métier : l’action d’affectation est bloquée si elle entraîne la sortie du dernier utilisateur actif du groupe d’administration GR02.
Fonctionnement #
Lors du clic sur Affecter, le script vérifie :
- combien d’utilisateurs actifs appartiennent actuellement à GR02
- combien parmi la sélection sont dans GR02
Le changement de groupe n’est autorisé que si au moins un administrateur actif reste dans GR02 après l’opération.
🧩 Code #
-- Déclaration des compteurs
DECLARE @témoin int, @témoin2 int
-- @témoin = nombre total d’utilisateurs actifs dans le groupe d’administration (GR02)
SET @témoin = (
SELECT COUNT(ID_UTILISATEUR)
FROM SECU_GROUPE_UTILISATEUR
WHERE ID_GROUPE = 'GR02'
AND ACTIF = 1
)
-- @témoin2 = nombre d’utilisateurs sélectionnés (dans BiBOARD)
-- qui appartiennent actuellement au groupe d’administration GR02
SET @témoin2 = (
SELECT COUNT(SECU_UTILISATEUR.ID_UTILISATEUR)
FROM SECU_GROUPE_UTILISATEUR
INNER JOIN SECU_UTILISATEUR
ON SECU_UTILISATEUR.ID_UTILISATEUR = SECU_GROUPE_UTILISATEUR.ID_UTILISATEUR
WHERE SECU_GROUPE_UTILISATEUR.ID_GROUPE = 'GR02'
AND SECU_UTILISATEUR.ID_UTILISATEUR IN ('@[ID_UTILISATEUR]')
)
-- Condition de sécurité :
-- On autorise l’affectation uniquement si le groupe GR02
-- conserve au moins un utilisateur actif après l’opération
IF (
( (@témoin >= 2) OR (@témoin = 1 AND @témoin2 = 0) )
AND (@témoin != @témoin2)
)
BEGIN
-- Changement de groupe pour les utilisateurs sélectionnés
UPDATE SECU_GROUPE_UTILISATEUR
SET ID_GROUPE = '@[ID_GROUPE]', -- nouveau groupe choisi dans BiBOARD
USER_SAISIE = '@[USER_SAISIE]' -- traçabilité de l’action
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
-- Mise à jour informative du statut côté utilisateur
UPDATE SECU_UTILISATEUR
SET DESCRIPTION = 'Affecté'
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
END
Intégrer #

Rôle #
Concernant la réactivation, le bouton ACTION_SQL “Intégrer” permet de réactiver un ou plusieurs utilisateurs précédemment suspendus et de réactiver leurs rattachements aux groupes. Concrètement, l’utilisateur est remis dans un état actif et opérationnel dans l’application.
Fonctionnement #
Lors du clic sur Intégrer, les utilisateurs sélectionnés passent :
- de Suspendu → Actif,
- Les liens groupe/utilisateur sont également réactivés,
- Les métadonnées de traçabilité sont mises à jour.
Résultat : l’utilisateur est de nouveau utilisable sans recréation de compte.
🧩 Code #
-- Réactivation des comptes utilisateurs sélectionnés
UPDATE SECU_UTILISATEUR
SET DESCRIPTION = 'Intégré', -- Statut fonctionnel lisible côté UI
ACTIF = 1, -- Réactivation du compte
DATE_FIN_ACTIF = NULL, -- Suppression de la date de fin de validité
USER_SAISIE = '@[USER_SAISIE]' -- Traçabilité : utilisateur ayant déclenché l’action
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
-- Réactivation des rattachements aux groupes
UPDATE SECU_GROUPE_UTILISATEUR
SET ACTIF = 1, -- Réactivation des droits / appartenances
DATE_FIN_ACTIF = NULL, -- Annulation de la date de fin
USER_SAISIE = '@[USER_SAISIE]' -- Traçabilité
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
Supprimer #

Rôle #
A l’inverse, le bouton ACTION_SQL “Supprimer” permet de retirer définitivement un ou plusieurs utilisateurs de l’application. Contrairement à l’action « Suspendre », cette opération supprime les données : l’utilisateur n’existe plus en base.
Attention : cette action est irréversible sauf en cas de restauration via une sauvegarde.
Règle métier (rappel) : la suppression est protégée par la règle “admin”, il est interdit de supprimer le dernier utilisateur actif du groupe d’administration GR02.
Fonctionnement #
Lors du clic sur Supprimer :
- Les enregistrements utilisateurs sont supprimés
- Les rattachements aux groupes sont supprimés
L’action est autorisée uniquement si la règle de sécurité (groupe GR02) est respectée
🧩 Code #
-- Suppression définitive des comptes utilisateurs sélectionnés
DELETE FROM SECU_UTILISATEUR
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
-- Suppression des rattachements aux groupes pour ces utilisateurs
DELETE FROM SECU_GROUPE_UTILISATEUR
WHERE ID_UTILISATEUR IN ('@[ID_UTILISATEUR]');
Libellés #
Filtre 1 #

Texte = 1
Visibilité = Non visible
Filtre 2 #

Texte = 0
Visibilité = Non visible
Donnée #

Datasource = REP_BDESE_PARAMETRES_USERLOGIN
Valeur affichée = utilisateur
Valeur de référence = utilisateur
Visibilité = Non visible
Tableaux et Liste déroulante #
Tableau 1 — liste des utilisateurs du référentiel #

Datasource = LOAD_BDESE_ADD_user
Sélection = Multiple
Rafraîchissement automatique = coché
Clé = user_login
Colonnes = user_login
Tableau 2 — Utilisateurs et groupe d’appartenance #

Datasource = REP_ADM_UTILISATEUR_GROUPE
Sélection = Multiple
Rafraîchissement automatique = coché
Clé = ID_UTILISATEUR
Colonnes = UTILISATEUR et GROUPE
List déroulante — liste des groupes #

Datasource = REP_ADM_GROUPE
Valeur affichée = GROUPE
Valeur de référence = ID_GROUPE
Propriétés / Composant / Comportement lors du filtrage = Masquer les lignes
Propriétés / Composant / Elements de la liste = par valeur de référence unique
Tableau 3 — liste des utilisateurs suspendus #

Datasource = REP_ADM_SECU_UTILISATEUR
Sélection = Multiple
Rafraîchissement automatique = coché
Clé = ID_UTILISATEUR
Colonnes = UTILISATEUR
Liens #
Rappel vue #

Tableau des liens #
| Source | Cible | Donnée source | Signe | Donnée cible |
| 1 orange | 3 bleu | Saisie de valeur | = | ACTIF |
| 1 orange | 2 bleu | Saisie de valeur | = | ACTIF_UTILISATEUR |
| 2 orange | 4 bleu | Saisie de valeur | = | ACTIF |
| 3 orange | 3 violet | Utilisateur | = | USER_SAISIE |
| 3 orange | 4 violet | Utilisateur | = | USER_SAISIE |
| 1 violet | 1 bleu | Recharger | ||
| 1 violet | 2 bleu | Recharger | ||
| 2 violet | 1 bleu | Recharger | ||
| 2 violet | 2 bleu | Recharger | ||
| 3 violet | 2 bleu | Recharger | ||
| 3 violet | 4 bleu | Recharger | ||
| 4 violet | 2 bleu | Recharger | ||
| 5 violet | 2 bleu | Recharger | ||
| 5 violet | 4 bleu | Recharger | ||
| 6 violet | 1 bleu | Recharger | ||
| 6 violet | 4 bleu | Recharger | ||
| 1 bleu | 1 violet | User_login | UTILISATEUR | |
| 2 bleu | 2 violet | ID_UTILISATEUR | ID_UTILISATEUR | |
| 2 bleu | 3 violet | ID_UTILISATEUR | ID_UTILISATEUR | |
| 2 bleu | 4 violet | ID_UTILISATEUR | ID_UTILISATEUR | |
| 3 bleu | 4 violet | ID_GROUPE | ID_GROUPE | |
| 4 bleu | 5 violet | ID_UTILISATEUR | = | ID_UTILISATEUR |
| 4 bleu | 6 violet | ID_UTILISATEUR | = | ID_UTILISATEUR |
Usage #
Dans le cadre de la documentation BiBOARD Gestion droits utilisateurs Application Web, vous pouvez désormais tester votre réalisation en ouvrant le portail. Si d’autres utilisateurs sont déjà présents dans BiBOARD, ils apparaîtront automatiquement dans la zone de gauche comme disponibles pour intégration. À partir de cette interface, vous pouvez alors manipuler l’administration des comptes et gérer les affectations selon vos besoins.
Rappel : cette gestion des droits utilisateurs reste strictement applicative et n’a aucun impact sur l’administration du Studio BiBOARD.
Cas concret : icône conditionnée par les droits
Description #
Dans ce cas d’usage, nous allons donc créer un tableau avec une icone afin de faciliter l’identification visuelle de l’action. Cette icone sera accessible ou non en fonction du groupe de l’utilisateur. Cette notion est portée principalement par la table SECU_MATRICE que nous avons préalablement chargé pour cet exemple.
🧩Base de données #
USE [DSN_DEV]
GO
/****** Object: Table [dbo].[BDESE_TECH_ICONE] Script Date: 2/24/2026 11:46:29 AM ******/
DROP TABLE IF EXISTS [dbo].[BDESE_TECH_ICONE]
GO
/****** Object: Table [dbo].[BDESE_TECH_ICONE] Script Date: 2/24/2026 11:46:29 AM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[BDESE_TECH_ICONE](
[ID_TI_SYSTEM] [int] IDENTITY(1,1) NOT NULL,
[ID_TI] AS ('TI'+right('0000'+CONVERT([varchar](4),[ID_TI_SYSTEM],(0)),(4))) PERSISTED,
[ID_TIG] [nvarchar](10) NOT NULL,
[ICONE] [nvarchar](255) NOT NULL,
[DESCRIPTION] [nvarchar](512) NULL,
[HTML_PART_1] [nvarchar](512) NULL,
[VAR_PART_1] [nvarchar](512) NULL,
[HTML_PART_2] [nvarchar](512) NULL,
[VAR_PART_2] [nvarchar](512) NULL,
[HTML_PART_3] [nvarchar](512) NULL,
[VAR_PART_3] [nvarchar](512) NULL,
[HTML_PART_4] [nvarchar](512) NULL,
[VAR_PART_4] [nvarchar](512) NULL,
[HTML_PART_5] [nvarchar](512) NULL,
[VAR_PART_5] [nvarchar](512) NULL,
[HTML_PART_6] [nvarchar](512) NULL,
[VAR_PART_6] [nvarchar](512) NULL,
[NOM_IMAGE] [nvarchar](128) NULL,
[ACTIF] [int] NULL,
[DATE_FIN_ACTIF] [datetime] NULL
) ON [PRIMARY]
GO
SET IDENTITY_INSERT [dbo].[BDESE_TECH_ICONE] ON
GO
INSERT [dbo].[BDESE_TECH_ICONE] ([ID_TI_SYSTEM], [ID_TIG], [ICONE], [DESCRIPTION], [HTML_PART_1], [VAR_PART_1], [HTML_PART_2], [VAR_PART_2], [HTML_PART_3], [VAR_PART_3], [HTML_PART_4], [VAR_PART_4], [HTML_PART_5], [VAR_PART_5], [HTML_PART_6], [VAR_PART_6], [NOM_IMAGE], [ACTIF], [DATE_FIN_ACTIF])
VALUES (1, N'TIG0001', N'Egapro', N'Egapro actif', N'<a style="display: inline-block;" href="/tableaux.aspx?vName=', N'Mon tableau de bord', N'&sidemenu=hide"> <img style="width: 100%;" alt="', N'Egapro', N'" src="data/images/BDESE/', NULL, N'"/> </a>', NULL, NULL, NULL, NULL, NULL, N'Logo-Index-Egalité-Professionnelle-Femmes-Hommes.png', 1, NULL)
GO
INSERT [dbo].[BDESE_TECH_ICONE] ([ID_TI_SYSTEM], [ID_TIG], [ICONE], [DESCRIPTION], [HTML_PART_1], [VAR_PART_1], [HTML_PART_2], [VAR_PART_2], [HTML_PART_3], [VAR_PART_3], [HTML_PART_4], [VAR_PART_4], [HTML_PART_5], [VAR_PART_5], [HTML_PART_6], [VAR_PART_6], [NOM_IMAGE], [ACTIF], [DATE_FIN_ACTIF])
VALUES (2, N'TIG0001', N'Egapro - Accès refusé', N'Egapro inactif', N'<a style="display: inline-block"> <img style="width: 100%;" alt="', NULL, NULL, N'Egapro - Accès refusé', N'" src="data/images/BDESE/', NULL, N'"/> </a>', NULL, NULL, NULL, NULL, NULL, N'Logo-Index-Egalité-Professionnelle-Femmes-Hommes NB.png', 1, NULL)
GO
/*
Note :
Mon tableau de bord = le nom d’un de vos tableaux de bords
BDESE/ = répertoire où sont déposés les 2 icones
Vous êtes libre de choisir 2 icones différentes pour les éléments ci-dessous
Logo-Index-Egalité-Professionnelle-Femmes-Hommes.png = nom de l’icone pour le cas ACTIF
Logo-Index-Egalité-Professionnelle-Femmes-Hommes NB.png = nom de l’icone pour le cas INACTIF
*/
BiBOARD #
🧩Requêtes #
Nom : ADM_BIB_TECH_ICONE_ACCES
Select
SECU_GROUPE.GROUPE,
SECU_GROUPE.ID_GROUPE,
SECU_UTILISATEUR.UTILISATEUR,
BDESE_TECH_ICONE.ICONE,
BDESE_TECH_ICONE.HTML_PART_1,
BDESE_TECH_ICONE.VAR_PART_1,
BDESE_TECH_ICONE.HTML_PART_2,
BDESE_TECH_ICONE.VAR_PART_2,
BDESE_TECH_ICONE.HTML_PART_3,
BDESE_TECH_ICONE.VAR_PART_3,
BDESE_TECH_ICONE.HTML_PART_4,
BDESE_TECH_ICONE.VAR_PART_4,
BDESE_TECH_ICONE.HTML_PART_5,
BDESE_TECH_ICONE.VAR_PART_5,
BDESE_TECH_ICONE.HTML_PART_6,
BDESE_TECH_ICONE.VAR_PART_6,
SECU_MATRICE.ID_GR,
SECU_MATRICE.ID_TI,
BDESE_TECH_ICONE.NOM_IMAGE,
BDESE_TECH_ICONE.ID_TIG,
BDESE_TECH_ICONE.DESCRIPTION,
SECU_UTILISATEUR.ACTIF As ACTIF_UTILISATEUR
From
SECU_GROUPE
Inner Join SECU_GROUPE_UTILISATEUR On SECU_GROUPE_UTILISATEUR.ID_GROUPE =
SECU_GROUPE.ID_GROUPE /*And SECU_GROUPE_UTILISATEUR.ACTIF = 1 */
Inner Join SECU_UTILISATEUR On SECU_UTILISATEUR.ID_UTILISATEUR =
SECU_GROUPE_UTILISATEUR.ID_UTILISATEUR
Inner Join SECU_MATRICE On SECU_GROUPE.ID_GROUPE = SECU_MATRICE.ID_GR
Inner Join BDESE_TECH_ICONE On SECU_MATRICE.ID_TI = BDESE_TECH_ICONE.ID_TI And
SECU_MATRICE.ID_TIG = BDESE_TECH_ICONE.ID_TIG
Where
SECU_UTILISATEUR.UTILISATEUR = :BIBOARDUSERNAME
🧩Datasources #
Créer le champ AFFICHAGE_ICONE de type chaines de caractères avec la formule
Field("HTML_PART_1")&Field("VAR_PART_1")&Field("HTML_PART_2")&Field("VAR_PART_2")&Field("HTML_PART_3")&Field("NOM_IMAGE")&Field("HTML_PART_4")
Tableaux de bord #

Composants #
Pour tester la gestion des droits, nous allons procéder étape par étape dans la conception du tableau de bord.
- Créer un nouveau tableau de bord
- Nom : Mon menu
- Créer le composant 1 de type libellé
- Texte = TIG0003
- Créer le composant 2 de typé libellé
- Datasource = ADM_BIB_TECH_ICONE_ACCES
- Valeur affichée = AFFICHAGE_ICONE
- Valeur de référence = AFFICHAGE_ICONE
- HTML = coché
- Créer le composant 3 de type libellé
- Texte = 1
Tableau des liens #
| Source | Cible | Donnée source | Signe | Donnée cible |
| 1 | 2 | Saisie de valeur | = | ID_TIG |
| 3 | 2 | Saisie de valeur | = | ACTIF_UTILISATEUR |
Tester son tableau de bord #
Si vous appartenez à un groupe (Exemple : GR02) qui permet d’avoir une icone active, vous obtenez cet affichage

Si vous n’appartenez pas à un groupe (Exemple : GR04) qui permet d’avoir une icone inactive, vous obtenez cet affichage. Pour changer de groupe, vous pouvez effectuer le changement directement en base de donnée si vous êtes le seul utilisateur GR02 en base.
Note : Pensez à réattribuer le GR02 à votre compte pour le bon fonctionnement de la configuration du menu d’administration.

