*Bonjour*
Dans un souci de simplicité et afin de bien verrouiller mon application, je me suis penché sur la manière de pouvoir limiter les accès (et différents droits) aux formulaires et ce par utilisateur (en fait je n'ai rien trouvé au niveau d'Access qui me convienne).
Pour cela, je dispose d'un formulaire d'authentification à l'entrée du programme, d'où la variable "numero_user" et d'une table d'enregistrement des droits qui ressemble à ceci :
avec un index unique sur les champs ID_FORM et ID_USER
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 [ID] [int] IDENTITY(1,1) NOT NULL, [ID_FORM] [int] NOT NULL, [ID_USER] [int] NOT NULL, [ACCES] [bit] NOT NULL CONSTRAINT [DF_AUTORISATION_FORMULAIRE_ACCES] DEFAULT ('false'), [LECTURE] [bit] NOT NULL CONSTRAINT [DF_AUTORISATION_FORMULAIRE_LECTURE] DEFAULT ('false'), [ECRITURE] [bit] NOT NULL CONSTRAINT [DF_AUTORISATION_FORMULAIRE_ECRITURE] DEFAULT ('false'),
Le but était d'identifier de manière certaine et sans se casser la tête le formulaire, je suis donc passé par les tables système d'Access.
Ce qui suit est à mettre dans un module
Et le reste à l'ouverture du formulaire
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 Option Compare Database Option Explicit Public nom_formulaire As String, id_formulaire As Long, acces, lecture, ecriture As Boolean Public Function autorisation_form() '******************************************************************************************** 'lecture dans la table système Dim identification_id_formulaire As DAO.Recordset Dim table_systeme As DAO.Database Set table_systeme = CurrentDb() Set identification_id_formulaire = table_systeme.OpenRecordset("SELECT MSysObjects.Id FROM MSysObjects WHERE (((MSysObjects.Name)='" & nom_formulaire & "'));", dbOpenDynaset, [dbSeeChanges]) id_formulaire = identification_id_formulaire.Fields("Id").Value identification_id_formulaire.Close table_systeme.Close Set identification_id_formulaire = Nothing Set table_systeme = Nothing '******************************************************************************************** 'lecture dans la table SQL Server Dim interrogation_droit As ADODB.Recordset Set interrogation_droit = New ADODB.Recordset interrogation_droit.CursorLocation = adUseServer interrogation_droit.Open "SELECT FORMULAIRE_AUTORISATION.* FROM FORMULAIRE_AUTORISATION WHERE (ID_USER = " & numero_user & ") AND (ID_FORM = " & id_formulaire & ")", connexion_database, adLockReadOnly acces = interrogation_droit.Fields("ACCES").Value lecture = interrogation_droit.Fields("LECTURE").Value ecriture = interrogation_droit.Fields("ECRITURE").Value End Function
Je ne dis pas que c'est ce qu'il y a de meilleur, mais ça a le mérite de fonctionner. D'ailleurs, si quelqu'un avait une autre solution je reste preneur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 Private Sub Form_Open(Cancel As Integer) nom_formulaire = Me.Name Call autorisation_form If acces = False Then MsgBox "Vous n'avez pas l'autorisation d'accéder à ce formulaire." & vbCrLf & "Veuillez contacter l'administrateur de base de données pour établir les droits d'accès.", vbOKOnly + vbDefaultButton1 + vbCritical, "Accès refusé" DoCmd.Close GoTo sortie_procedure End If sortie_procedure: End Sub
*merci d'avance*
Partager