Implémenter un contrôle d’accès multi-niveaux, Excel VBA

Implémenter un contrôle d’accès multi-niveaux, Excel VBA

Voici un code détaillé pour implémenter un contrôle d’accès multi-niveaux dans Excel VBA, accompagné d’une explication complète.
Contexte
Nous allons créer un système de contrôle d’accès basé sur des rôles où :

  • Il existe différents niveaux d’utilisateurs : Admin, Manager, et User.
  • Chaque niveau d’utilisateur a des droits d’accès différents (par exemple, l’Admin a un accès complet, le Manager a un accès limité et l’User a seulement un accès en lecture).
  • Lors de l’ouverture du classeur, l’utilisateur doit entrer un nom d’utilisateur et un mot de passe. En fonction des informations saisies, le système déterminera son rôle et accordera l’accès en conséquence.

Étapes pour implémenter le contrôle d’accès multi-niveaux
1. Définir les rôles et les identifiants des utilisateurs
Les identifiants des utilisateurs ainsi que leurs rôles (Admin, Manager, User) seront stockés dans une feuille cachée du classeur. Nous définirons par exemple les informations suivantes dans la feuille UserRoles :

Nom d’utilisateur Mot de passe Rôle
admin admin123 Admin
manager1 mng123 Manager
user1 user123 User

2. Créer un formulaire de connexion
Nous devons créer un formulaire où l’utilisateur pourra entrer son nom d’utilisateur et son mot de passe.
1. Allez dans Onglet Développeur > Insérer > UserForm.
2. Créez un formulaire simple avec :

  • Une TextBox pour le nom d’utilisateur (nommée txtUsername).
  • Une TextBox pour le mot de passe (nommée txtPassword et définissez la propriété PasswordChar à * pour masquer le mot de passe).
  • Un CommandButton pour la connexion (nommé btnLogin).

3. Écrire le code VBA pour l’authentification des utilisateurs
Voici le code qui vérifie les informations saisies par l’utilisateur et les compare avec celles stockées dans la feuille UserRoles.

Dim UserRole As String
Sub ShowLoginForm()
    ' Affiche le formulaire de connexion
    LoginForm.Show
End Sub
Sub btnLogin_Click()
    Dim ws As Worksheet
    Dim username As String
    Dim password As String
    Dim lastRow As Long
    Dim i As Long
    Dim userFound As Boolean
    ' Récupère le nom d'utilisateur et le mot de passe saisis par l'utilisateur
    username = LoginForm.txtUsername.Value
    password = LoginForm.txtPassword.Value
    ' Référence à la feuille 'UserRoles' où sont stockées les informations
    Set ws = ThisWorkbook.Sheets("UserRoles")
    ' Trouver la dernière ligne avec des données
    lastRow = ws.Cells(ws.Rows.Count, "A").End(xlUp).Row
    userFound = False
    ' Parcours de la feuille UserRoles pour valider le nom d'utilisateur et le mot de passe
    For i = 2 To lastRow
        If ws.Cells(i, 1).Value = username And ws.Cells(i, 2).Value = password Then
            ' Si une correspondance est trouvée, on attribue le rôle de l'utilisateur
            UserRole = ws.Cells(i, 3).Value
            userFound = True
            Exit For
        End If
    Next i
    ' Si aucune correspondance n'est trouvée, afficher un message d'erreur
    If Not userFound Then
        MsgBox "Nom d'utilisateur ou mot de passe invalide", vbCritical
        Exit Sub
    End If
    ' Masque le formulaire de connexion
    LoginForm.Hide
    ' Appelle la fonction pour définir les droits d'accès selon le rôle
    SetUserAccess UserRole
End Sub
Sub SetUserAccess(role As String)
    ' Selon le rôle, définir les accès de l'utilisateur
    Select Case role
        Case "Admin"
            ' Accès complet (ex : afficher des feuilles, autoriser l'édition)
            MsgBox "Bienvenue, Admin. Vous avez un accès complet."
            ' Exemple : afficher une feuille
            ThisWorkbook.Sheets("AdminSheet").Visible = xlSheetVisible
        Case "Manager"
            ' Accès limité (ex : afficher certaines feuilles ou désactiver certaines fonctionnalités)
            MsgBox "Bienvenue, Manager. Vous avez un accès limité."
            ' Exemple : autoriser l'accès à certaines sections
            ThisWorkbook.Sheets("ManagerSheet").Visible = xlSheetVisible
        Case "User"
            ' Accès en lecture seule (ex : masquer des feuilles, interdire l'édition)
            MsgBox "Bienvenue, User. Vous avez un accès en lecture seule."
            ' Exemple : protéger la feuille
            ThisWorkbook.Sheets("UserSheet").Visible = xlSheetVisible
            ThisWorkbook.Sheets("UserSheet").Protect
        Case Else
            MsgBox "Rôle invalide", vbCritical
    End Select
End Sub

Explication du code :
1. ShowLoginForm : Cette procédure affiche le formulaire de connexion lorsque l’utilisateur lance le processus.
2. btnLogin_Click : Cette procédure vérifie que le nom d’utilisateur et le mot de passe saisis par l’utilisateur correspondent aux informations dans la feuille UserRoles. Si une correspondance est trouvée, le rôle de l’utilisateur est attribué à la variable UserRole et la procédure SetUserAccess est appelée pour gérer les accès en fonction du rôle.
3. SetUserAccess : Selon le rôle de l’utilisateur (Admin, Manager, ou User), cette procédure gère les accès :

  • Admin : Accès complet (par exemple, on peut afficher toutes les feuilles).
  • Manager : Accès limité à certaines feuilles ou sections du fichier.
  • User : Accès en lecture seule, avec des feuilles protégées et des fonctionnalités limitées.

4. Configurer le contrôle d’accès aux feuilles
Dans la procédure SetUserAccess :

  • Admin : L’Admin a un accès complet, il peut afficher toutes les feuilles et les modifier.
  • Manager : Le Manager a un accès limité, il peut accéder à certaines feuilles ou sections.
  • User : L’User a uniquement un accès en lecture seule, les feuilles peuvent être protégées pour empêcher l’édition.

Exemple pour protéger une feuille pour un utilisateur :
ThisWorkbook.Sheets("UserSheet").Protect Password:="userpass"
5. Protéger le classeur et les feuilles
Afin d’empêcher les utilisateurs non autorisés de modifier la structure du classeur :

  • Protéger les feuilles : Après avoir défini les droits d’accès, vous pouvez protéger les feuilles pour empêcher les modifications non autorisées.

ThisWorkbook.Sheets("UserSheet").Protect Password:="userpass"

  • Protéger le classeur : Protégez l’ensemble du classeur pour empêcher l’ajout ou la suppression de feuilles.

ThisWorkbook.Protect Password:="workbookpassword"
6. Personnalisation du système
Ce système peut être personnalisé davantage en ajoutant :

  • Un interface Admin pour gérer les utilisateurs et les rôles (ajouter, supprimer ou modifier des utilisateurs).
  • Des permissions avancées comme restreindre l’accès à certaines plages de données ou fonctionnalités.

7. Ajouter une interface Admin
Si vous êtes administrateur, vous pouvez ajouter une interface utilisateur pour gérer les utilisateurs et les rôles. Cela pourrait être fait à l’aide de formulaires Excel ou en utilisant des feuilles Excel protégées avec des macros VBA.
Notes finales :

  • Sécurité : Cette méthode est un système de contrôle d’accès basique. Les mots de passe ne sont pas cryptés et peuvent être extraits par quelqu’un ayant suffisamment de connaissances sur Excel.
  • Extensibilité : Vous pouvez étendre ce modèle en ajoutant plus de rôles, des restrictions d’accès spécifiques et des fonctionnalités comme la journalisation des actions des utilisateurs.

Ce système offre un contrôle d’accès simple basé sur des rôles dans Excel à l’aide de VBA.

Facebook
Twitter
LinkedIn
WhatsApp
Email
Print
0
Nous aimerions avoir votre avis, veuillez laisser un commentaire.x