View Categories

Gestion des droits utilisateurs (Application Web)

Table des matières

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 :

ObjetRôle
SECU_UTILISATEURComptes applicatifs (login, statut, traçabilité).
SECU_GROUPEGroupes fonctionnels (rôles).
SECU_GROUPE_UTILISATEURAppartenance utilisateur ↔ groupe (activation/désactivation).
SECU_MATRICEDroits 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 #

ActionEffetRéversible
IntégrerCrée le compte applicatif et rattache à un groupe par défaut.Oui (via suppression / suspension)
Affecter / DéplacerChange le groupe (périmètre d’accès).Oui
SuspendreDésactive l’utilisateur et ses rattachements aux groupes.Oui (Réintégrer)
RéintégrerRéactive l’utilisateur et ses rattachements.Oui
SupprimerSupprime 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 #

Figure 1 — 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
Tableau — Résultat de la table temporaire après tratement

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é BiBOARDCôté SQL
Sélection multipleTableau simple multi sélection
Bouton ACTION SQLProcédure InsertFromRawUserList
IDs concaténésTable 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
Tableau — Tableau liste (exemple)

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

CoucheRôle
Interface BiBOARDSélection multiple d’utilisateurs
Bouton ACTION SQLAppel de la procédure intermédiaire
Procédure “parser”Transformation string → TVP
Procédure métierCréation utilisateurs + rattachement groupes
Tableau 1 — Description fonctionnement

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 #

Figure 2 — SECU_UTILISATEUR

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

Figure 3 — SECU_UTILISATEUR

ACTION_SQL #

Intégrer #

Figure 4 — 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 multipleTableau BiBOARD
DéclenchementBouton ACTION_SQL “Intégrer”
ParsingInsertFromRawUserList
Traitement métierInsertMultipleUtilisateursEtGroupes_TVP
Tableau 2 — Fonctionnement

Supprimer #

Figure 5 — 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 #

Figure 6 — 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 #

Figure 7 — 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 #

Figure 8 — 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 #

Figure 9 — 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 #

Figure 10 — Filtre 1

Texte = 1
Visibilité = Non visible

Filtre 2 #

Figure 11 — Filtre 2

Texte = 0
Visibilité = Non visible

Donnée #

Figure 12 — 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 #

Figure 13 — 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 #

Figure 14 — 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 #

Figure 15 — Liste 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 #

Figure 16 — 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 #

Figure 17 — vue BiBOARD

Tableau des liens #

SourceCibleDonnée sourceSigneDonnée cible
1 orange3 bleuSaisie de valeur=ACTIF
1 orange2 bleuSaisie de valeur=ACTIF_UTILISATEUR
2 orange4 bleuSaisie de valeur=ACTIF
3 orange3 violetUtilisateur=USER_SAISIE
3 orange4 violetUtilisateur=USER_SAISIE
1 violet1 bleu Recharger 
1 violet2 bleu Recharger 
2 violet1 bleu Recharger 
2 violet2 bleu Recharger 
3 violet2 bleu Recharger 
3 violet4 bleu Recharger 
4 violet2 bleu Recharger 
5 violet2 bleu Recharger 
5 violet4 bleu Recharger 
6 violet1 bleu Recharger 
6 violet4 bleu Recharger 
1 bleu1 violetUser_login UTILISATEUR
2 bleu2 violetID_UTILISATEUR ID_UTILISATEUR
2 bleu3 violetID_UTILISATEUR ID_UTILISATEUR
2 bleu4 violetID_UTILISATEUR ID_UTILISATEUR
3 bleu4 violetID_GROUPE ID_GROUPE
4 bleu5 violetID_UTILISATEUR=ID_UTILISATEUR
4 bleu6 violetID_UTILISATEUR=ID_UTILISATEUR
Tableau — Liens entre les composants — TdB d’administration

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 #

Figure 18 — Vue BiBOARD du tableau de bord pour test

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 #

SourceCibleDonnée sourceSigneDonnée cible
12Saisie de valeur=ID_TIG
32Saisie de valeur=ACTIF_UTILISATEUR
Tableau — Liens entre les composants — TdB test

Tester son tableau de bord #

Si vous appartenez à un groupe (Exemple : GR02) qui permet d’avoir une icone active, vous obtenez cet affichage

Figure 19 — Affichage de l’icône active

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.

Figure 19 — Affichage de l’icône inactive
Retour en haut