IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Gestion de droits utilisateurs


Sujet :

VBA Access

  1. #1
    Futur Membre du Club
    Femme Profil pro
    IPEPS
    Inscrit en
    Novembre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : IPEPS

    Informations forums :
    Inscription : Novembre 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut Gestion de droits utilisateurs
    "Bonjour"
    Je doit faire une base de données sur une société d'import export de fruit et légumes.
    Avec plusieurs départements différents et chaque département a son accès spécifique, donc je dois créer un code avec niveaux de droit mais j'ai du mal à comprendre le code, donc besoin d'aide pour bien comprendre et le déchiffrer

    le code:
    1234567891011121314151617181920212223242526272829303132333435
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Private Sub cmdConnexion_Click()
        ' Variables de travail
        Dim strSQL As String
        Dim reqUser As Recordset
     
        ' Vérification s'il y a des informations dans les champs
        If txtUser = "" Then
            MsgBox ("Nom d'utilisateur non renseigné !")
            Exit Sub
        End If
        If txtMP = "" Then
            MsgBox ("Mot de passe non renseigné !")
            Exit Sub
        End If
        ' Vérification du compte utilisateur
        strSQL = "Select DROIT from Users Where PSEUDO like '" & txtUser & "' AND MP like '" & txtMP & "';"
        ' Création de l'objet requête à partir de la requête stockée dans la variable strSQL
        Set reqUser = CurrentDb.OpenRecordset(strSQL)
        ' Il ne doit y avoir qu'une ligne si on a trouvé l'utilisateur dans la table
        If reqUser.RecordCount = 1 Then
            ' On a trouvé l'utilisateur, on sauve son niveau de droit et son nom
            txtUtilisateur = txtUser
            intNiveauUtilisateur = reqUser!DROIT
            ' On peut accéder à l'application
            DoCmd.OpenForm "F_MENU"
            DoCmd.Close acForm, "frmConnexion"
        Else
            ' Accès refusé
            MsgBox ("Vous n'êtes pas autorisé à accéder à cette application !")
            txtUtilisateur = ""
            intNiveauUtilisateur = 0
        End If
        ' Libération de la mémoire des variables utilisées dans cette fonction "Click"
        reqUser.Close
        Set reqUser = Nothing
    "Merci"

  2. #2
    Modérateur

    Homme Profil pro
    Inscrit en
    Octobre 2005
    Messages
    15 331
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations forums :
    Inscription : Octobre 2005
    Messages : 15 331
    Points : 23 786
    Points
    23 786
    Par défaut
    Quelle partie du code ne comprends-tu as ?

    Actuellement ce code gère seulement 2 choses : soit tu as accès au formulaire "F_MENU" soit tu n'as pas accès du tout au menu et donc, je suppose, à l'application.

    A+
    Vous voulez une réponse rapide et efficace à vos questions téchniques ?
    Ne les posez pas en message privé mais dans le forum, vous bénéficiez ainsi de la compétence et de la disponibilité de tous les contributeurs.
    Et aussi regardez dans la FAQ Access et les Tutoriaux Access. C'est plein de bonnes choses.

  3. #3
    Futur Membre du Club
    Femme Profil pro
    IPEPS
    Inscrit en
    Novembre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : IPEPS

    Informations forums :
    Inscription : Novembre 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    heu a peut pres tout le code en faite

    En faite le code doit me permettre de pouvoir bloquer l’accès au utilisateur non renseigner.
    et de plus bloquer certains boutons. en gros le service vente n'a pas accès au service achat donc les boutons doivent être sur-briller (pas sur de mon terme) de manière a ne pas savoir cliquer dessus

  4. #4
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonsoir,

    Si votre base de données est mise sur le serveur de l'entreprise en question, il existe une solution qui ne met pas en place de système de mots de passe, ni d'identifiants à rentrer à chaque connexion sur la base de données.

    J'ai effectué un développement de gestion d'utilisateurs sous Access 2010, il y a 3 mois pour une entreprise et cela fonctionne plutôt bien.

    Voici le lien où j'expose la solution que j'ai adoptée et exposée sur un topic du forum :
    http://www.developpez.net/forums/d25...c-access-2007/

    Le procédé est basé sur une gestion de groupes d'utilisateurs (dans votre cas, des départements).
    Chaque groupe obtiendra son propre formulaire d'Accueil et les utilisateurs de ces groupes sont identifiés à l'aide du code
    Ce code récupère l'identifiant de connexion sous une session Windows ou un serveur.

    Si vous avez des questions, je serais disponible pour y répondre.
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  5. #5
    Futur Membre du Club
    Femme Profil pro
    IPEPS
    Inscrit en
    Novembre 2012
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Belgique

    Informations professionnelles :
    Activité : IPEPS

    Informations forums :
    Inscription : Novembre 2012
    Messages : 18
    Points : 7
    Points
    7
    Par défaut
    merci GADO2600

    en faite c'est pour un examen

    Madame V m'as dit (voila un bout de temps) de +- faire la même choses
    Donc de créer un formulaire pour chaque secteur donc departement
    Monsieur P lui me dit qu'avec son code ca devrait fonctionner de manière à ce que les droit d'acces se mettent avec le code et bla bla bla .......
    Seulement j'y comprend pas grand choses. Et n'y connais pas grand choses.
    Si je me souvient bien, je peux mettre l'application sur réseau mais là j'avoue que je ne sais pas du tout comment je doit faire n'y ce dont j'ai besoin pour le faire.

    maintenant si je prend un formulaire par departement je doit quand même inclure le code ou pas? si oui celui là ou un autre?

  6. #6
    Membre expérimenté Avatar de Gado2600
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Mai 2013
    Messages
    903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur Office VBA

    Informations forums :
    Inscription : Mai 2013
    Messages : 903
    Points : 1 364
    Points
    1 364
    Par défaut
    Bonjour,
    Pour utiliser ce que j'ai fait, il vous faut 4 tables :
    1. Gestion Personnel avec comme champs importants
      • ID_Personnel
      • IDGroupe
      • NomUtilisateur (qui est déterminé par la commande Environ("UserName"))
    2. Formulaires
      • IDFormulaire
      • NomFormulaire
    3. Gestion Groupe
      • IDGroupe
      • NomGroupe
    4. Autorisation
      • IDGroupe
      • IDFormulaire
      • Autorise (type case à cocher/Vrai ou faux...)


    Évidemment, vous pouvez mettre d'autres informations dedans.

    Ensuite, il vous faut 4 formulaires :
    1. Gestion Personnel (où vous affecterez le nom du groupe et l'identifiant de connexion)
    2. Gestion Accès (qui sera généré dynamiquement pour afficher la liste des formulaires auxquels les accès sont restreints ainsi que les groupes)
    3. UN formulaire d'Accueil vierge (qui servira de référence pour la création des autres formulaires)
    4. Un formulaire d'Ouverture qui permettra de récupérer l'identifiant de la personne connectée


    Bon, pour la partie Gestion Personnel, ce n'est que de l'enregistrement pur et dur.
    L'ouverture de Gestion Accès se fait dynamiquement à partir des formulaires d'Accueil.
    L'objectif ici est de visualiser tous les formulaires dont les accès sont restreints en fonction du groupe.
    Personnellement, j'ai placé ce code dans un module.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    Function GestionGroupe()
        Dim mabase As DAO.Database
        Dim rec As DAO.Recordset
        Dim Check As CheckBox
        Dim Listgr As ComboBox
        Dim Bouton As CommandButton
        Dim LabelBox As Label
        Dim Ctrl As Access.Control
        Dim x, y, l, w As Integer
        Dim Alignement As Boolean
     
        Set mabase = CurrentDb
        Set rec = mabase.OpenRecordset("Formulaires", dbOpenTable, dbReadOnly)
        DoCmd.OpenForm "Gestion Accès", acDesign
     
        x = 570
        y = 1700
        l = 3000
        w = 500
     
        ' Phase de suppression des contrôles
        For Alpha = Forms![Gestion Accès].Controls.Count - 1 To 0 Step -1
            DeleteControl "Gestion Accès", Forms![Gestion Accès].Controls(Alpha).Name
        Next
     
        ' Fermeture et ouverture des formulaires concernés
        DoCmd.RunCommand acCmdPaste
     
        ' Création des contrôles nécessaires par défaut
        Set LabelBox = CreateControl("Gestion Accès", acLabel, , , "Liste des groupes", x, 1250, l, 250)
            LabelBox.Name = "Liste"
            LabelBox.ForeColor = vbBlack
            LabelBox.BackColor = vbWhite
            LabelBox.BorderStyle = 1
            LabelBox.BorderColor = vbBlack
        Set Listgr = CreateControl("Gestion Accès", acComboBox, , , , 3000, 1250, l, 250)
            Listgr.Name = "ListeGroupe"
            Listgr.ForeColor = vbBlack
            Listgr.RowSourceType = "Value List"
            Listgr.AfterUpdate = "[Procédure événementielle]"
        Set Bouton = CreateControl("Gestion Accès", acCommandButton, , , , 7500, 300, 1500, 500)
            Bouton.Name = "Save"
            Bouton.Caption = "Sauvegarder"
            Bouton.OnClick = "[Procédure événementielle]"
        Set Bouton = CreateControl("Gestion Accès", acCommandButton, , , , 7500, 1000, 1500, 500)
            Bouton.Name = "Fermer"
            Bouton.Caption = "Fermer"
            Bouton.OnClick = "[Procédure événementielle]"
     
        rec.MoveFirst
        ' Création des contrôles liés à la table Formulaires
        Alignement = False
        While rec.EOF = False
            If Alignement = False Then
                y = y + 600
                x = 500
                Alignement = True
            Else
                x = 6000
                Alignement = False
            End If
     
            Set LabelBox = CreateControl("Gestion Accès", acLabel, , , rec.Fields("NomFormulaire").Value, x + 200, y, l, w)
                LabelBox.Name = rec.Fields("NomFormulaire").Value & 0
                LabelBox.BackColor = vbWhite
                LabelBox.BorderStyle = 0
                LabelBox.BorderColor = vbBlack
                LabelBox.ForeColor = vbBlack
     
            Set Check = CreateControl("Gestion Accès", acCheckBox, , , , x - 75, y + 75, 200, 200)
                Check.Name = rec.Fields("NomFormulaire").Value & 1
     
            rec.MoveNext
        Wend
     
        DoCmd.Close acForm, "Gestion Accès", acSaveYes
        DoCmd.OpenForm "Gestion Accès"
        Set txtbox = Nothing
        Set Check = Nothing
        Set Label = Nothing
        rec.Close
    End Function
    La partie enregistrement d'un nouveau groupe ou la modification des droits d'un groupe se fait comme ci-dessous.
    Le principe est de faire une copie du formulaire d'Accueil de base afin d'en récupérer tous les codes qui peuvent être contenus dedans.
    Évidemment, ces codes sont des procédures événementielles, ce qui permet de les attribuer à des boutons pour ouvrir des formulaires par exemple.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    Private Sub Save_Click()
        Dim mabase As DAO.Database
        Dim recUsers, recAuto, recForm As DAO.Recordset
        Dim Nom, NomTemporaire As String
        Dim RC As Boolean
        Dim NumUsers, NumForm, i, x, y, l, w As Integer
        Dim Formulaire As Form
        Dim Bouton As CommandButton
     
        Set mabase = CurrentDb
        Set recUsers = mabase.OpenRecordset("Gestion Groupe")
        Set recAuto = mabase.OpenRecordset("Autorisation")
        Set recForm = mabase.OpenRecordset("Formulaires")
     
        i = 0
        x = 0
        y = 1500
        l = 2000
        w = 1000
     
        If IsNull(Me.ListeGroupe.Value) Then
            Me.ListeGroupe.Value = "Nouveau Groupe"
        End If
     
        If Me.ListeGroupe.Value = "Nouveau Groupe" Then
            MsgBox (Me.ListeGroupe.Value)
            Nom = InputBox("Entrez un nouveau nom de groupe")
            recUsers.AddNew
            recUsers.Fields("NomGroupe").Value = Nom
            recUsers.Update
     
            RC = False
            recUsers.MoveFirst
            While recUsers.EOF = False And RC = False
                If recUsers.Fields("NomGroupe").Value = Nom Then
                    NumUsers = recUsers.Fields("IDGroupe").Value
                    RC = True
                End If
                recUsers.MoveNext
            Wend
     
            recForm.MoveFirst
     
            DoCmd.CopyObject , "Accueil_" & Nom, acForm, "Accueil"
            DoCmd.OpenForm "Accueil_" & Nom, acDesign
     
            While recForm.EOF = False
                NumForm = recForm.Fields("IDFormulaire").Value
                recAuto.AddNew
                recAuto.Fields("IDGroupe").Value = NumUsers
                recAuto.Fields("IDFormulaire").Value = NumForm
                recAuto.Fields("Autorise").Value = Me.Controls(recForm.Fields("NomFormulaire").Value & 1).Value
                recAuto.Update
     
                If Me.Controls(recForm.Fields("NomFormulaire").Value & 1).Value = True Then
                    x = i * 2500 + 500
                    i = i + 1
                    Set Bouton = CreateControl("Accueil_" & Nom, acCommandButton, , , , x, y, l, w)
                        Bouton.Name = "Bouton" & recForm.Fields("IDFormulaire").Value
                        Bouton.Caption = recForm.Fields("NomFormulaire").Value
                        Bouton.OnClick = "[Procédure événementielle]"
                End If
                If i = 4 Then
                    y = y + 1500
                    i = 0
                End If
     
                recForm.MoveNext
            Wend
            DoCmd.Close acForm, "Accueil", acSaveNo
            DoCmd.Close acForm, "Accueil_" & Nom, acSaveYes
     
        Else
            Nom = Me.ListeGroupe.Value
            recUsers.MoveFirst
            RC = False
            While recUsers.EOF = False And RC = False
                If recUsers.Fields("NomGroupe").Value = Nom Then
                    NumUsers = recUsers.Fields("IDGroupe").Value
                    RC = True
                End If
                recUsers.MoveNext
            Wend
     
            DoCmd.DeleteObject acForm, "Accueil_" & Nom
            DoCmd.CopyObject , "Accueil_" & Nom, acForm, "Accueil"
            DoCmd.OpenForm "Accueil_" & Nom, acDesign
     
            recForm.MoveFirst
            ' On parcourt la table des formulaires
            While recForm.EOF = False
                recAuto.MoveFirst
                RC = False
                ' On parcourt la table des autorisations
                While recAuto.EOF = False And RC = False
                ' Si on a le numéro d'utilisateur recherché
                    If recAuto.Fields("IDGroupe").Value - NumUsers = 0 Then
                ' Si on a l'identifiant du formulaire recherché
                        If recAuto.Fields("IDFormulaire").Value = recForm.Fields("IDFormulaire").Value Then
                 ' On édite la donnée d'autorisation
                            recAuto.Edit
                            recAuto.Fields("Autorise").Value = Me.Controls(recForm.Fields("NomFormulaire").Value & 1).Value
                            recAuto.Update
     
                            RC = True
                        End If
                    End If
                    recAuto.MoveNext
                Wend
                If RC = False Then
                    recAuto.AddNew
                    recAuto.Fields("IDGroupe").Value = NumUsers
                    recAuto.Fields("IDFormulaire").Value = recForm.Fields("IDFormulaire").Value
                    recAuto.Fields("Autorise").Value = Me.Controls(recForm.Fields("NomFormulaire").Value & 1).Value
                    recAuto.Update
                    RC = True
                End If
                ' On créé le nouveau bouton si le groupe y a droit
                If RC = True Then
                    If Me.Controls(recForm.Fields("NomFormulaire").Value & 1).Value = True Then
                        x = i * 2500 + 500
                        i = i + 1
                        Set Bouton = CreateControl("Accueil_" & Nom, acCommandButton, , , , x, y, l, w)
                            Bouton.Name = "Bouton" & recForm.Fields("IDFormulaire").Value
                            Bouton.Caption = recForm.Fields("NomFormulaire").Value
                            Bouton.OnClick = "[Procédure événementielle]"
                        End If
     
                        If i = 4 Then
                            y = y + 1500
                            i = 0
                        End If
                 End If
                recForm.MoveNext
            Wend
        End If
        DoCmd.Close acForm, "Accueil_" & Nom, acSaveYes
        MsgBox ("Sauvegarde réussie")
        Call Form_Current
    End Sub
    Enfin, le formulaire d'Ouverture est celui qui permettra d'ouvrir le formulaire correspondant au bon groupe.
    Il permettra par la suite de revenir sur le formulaire d'Accueil du groupe en cas de besoin.
    J'ai également placé son code dans un module pour je ne sais plus quelle raison
    Mais son code se présente comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Function GroupeUser()
     
        Dim mabase As DAO.Database
        Dim rec, recUser As DAO.Recordset
        Dim Nom As String
        Dim RC As Boolean
        Dim ID As Integer
     
        Set mabase = CurrentDb
        Set rec = mabase.OpenRecordset("GestionPersonnel", dbOpenTable, dbReadOnly)
        Set recUser = mabase.OpenRecordset("Gestion Groupe", dbOpenTable, dbReadOnly)
     
        Nom = Environ("UserName")
     
        RC = False
        While rec.EOF = False And RC = False
            If rec.Fields("NomUtilisateur").Value = Nom Then
                ID = rec.Fields("IDGroupe").Value
                RC = True
            Else
                rec.MoveNext
            End If
        Wend
     
        RC = False
        While recUser.EOF = False And RC = False
            If recUser.Fields("IDGroupe").Value = ID Then
                DoCmd.OpenForm "Accueil_" & recUser.Fields("NomGroupe").Value
                RC = True
            Else
                recUser.MoveNext
            End If
        Wend
     
        GroupeUser = recUser.Fields("NomGroupe").Value
     
        If RC = False Then
            DoCmd.OpenForm "Accueil"
            MsgBox ("Vous n'appartenez à aucun groupe." & vbCrLf & "Veuillez contactez un administratif de la base de donnée.")
        End If
     
        rec.Close
        recUser.Close
     
        DoCmd.Close acForm, "Ouverture"
     
    End Function
    Voilà. Vous avez, je pense, tout mon travail sur cette gestion d'utilisateurs
    Bon courage ^^
    Le sabre est une arme. Le kendo est un art de tuer. Quelles que soient les belles paroles pour l'expliquer, telle est sa vérité.

  7. #7
    Candidat au Club
    Homme Profil pro
    Inspecteur de l'enseignement secondaire général
    Inscrit en
    Janvier 2015
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Bénin

    Informations professionnelles :
    Activité : Inspecteur de l'enseignement secondaire général
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2015
    Messages : 3
    Points : 4
    Points
    4
    Par défaut code2 de la proposition Gado2600
    dans les fonctions If IsNull(Me.ListeGroupe.Value) then Access ne reconnait pas Me que faire?

Discussions similaires

  1. [SBI] Gestion des droits utilisateurs
    Par booobdez dans le forum SpagoBI
    Réponses: 6
    Dernier message: 11/06/2009, 11h00
  2. Réponses: 3
    Dernier message: 15/09/2008, 16h37
  3. [BO 5.1.8] Renseignements gestion des droits utilisateurs
    Par ninou58 dans le forum Administration-Migration
    Réponses: 5
    Dernier message: 17/07/2008, 22h24
  4. gestion des droits utilisateurs par vba
    Par laurent.w dans le forum Sécurité
    Réponses: 14
    Dernier message: 17/01/2007, 08h09
  5. gestion des droits utilisateurs struts
    Par ijklm dans le forum Struts 1
    Réponses: 1
    Dernier message: 18/05/2006, 19h17

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo