Vous êtes sur la page 1sur 4

1.

gestion des droits d'accs aux formulaires


*Bonjour*
Dans un souci de simplicit et afin de bien verrouiller mon application, je me suis pench
sur la manire de pouvoir limiter les accs (et diffrents 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'entre du programme, d'o la
variable "numero_user" et d'une table d'enregistrement des droits qui ressemble ceci :

Code :
1
2
3
4
5
6

Slectionner tout - Visualiser dans une fentre part

[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'),

avec un index unique sur les champs ID_FORM et ID_USER


Le but tait d'identifier de manire certaine et sans se casser la tte le formulaire, je suis
donc pass par les tables systme d'Access.
Ce qui suit est mettre dans un module

Code :
1
2
3
4
5
6
7
8
9
1
0
11
1
2
1
3
1
4
1
5
1
6
1
7
1
8

Slectionner tout - Visualiser dans une fentre part

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 systme
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

1 lecture = interrogation_droit.Fields("LECTURE").Value
= interrogation_droit.Fields("ECRITURE").Value
9 ecriture
End Function
2
0
2
1
2
2
2
3
2
4
2
5
2
6
Et le reste l'ouverture du formulaire

Code :
1
2
3
4
5
6
7
8
9
10
11

Slectionner tout - Visualiser dans une fentre part


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'accder ce formulaire." &
vbCrLf & "Veuillez contacter l'administrateur de base de donnes
pour tablir les droits d'accs.", vbOKOnly + vbDefaultButton1 +
vbCritical, "Accs refus"
DoCmd.Close
GoTo sortie_procedure
End If
sortie_procedure:
End Sub

Je ne dis pas que c'est ce qu'il y a de meilleur, mais a a le mrite de fonctionner.


D'ailleurs, si quelqu'un avait une autre solution je reste preneur.
*merci d'avance*
Rpondre avec citation

2.

14/07/2011, 20h50#2

DMboup

Membre expriment

Inscrit en
juin 2003
Messages
1 211

0 0Crer une entre Blog

Points
1 526

Bonjour
C'est un bon dbut mais incomplet quand mme. Aprs l'ouverture de ton formulaire
pour ceux qui ont le droit, ya t-il d'autres contrle pour la lecture et/ou l'criture?
Autre chose
Apparemment tous les utilisateurs verront tous les formulaires mais ne sauront s'ils ont
l'autorisation d'y accder quand essayant de les ouvrir. Tu pouvez faire de sorte que
chaque utilisateurs ne voit que les formulaires dont il a droit d'accs.
Bon courage.
Amicalement
Rpondre avec citation

3.

0 0Crer une entre Blog

15/07/2011, 13h12#3

Rmi GAUDINAT

Membre rgulier

Inscrit en
juin 2010
Messages
53
Points
70

Envoy par DMboup

Bonjour
C'est un bon dbut mais incomplet quand mme. Aprs l'ouverture de ton formulaire
pour ceux qui ont le droit, ya t-il d'autres contrle pour la lecture et/ou l'criture?
Autre chose
Apparemment tous les utilisateurs verront tous les formulaires mais ne sauront s'ils ont
l'autorisation d'y accder quand essayant de les ouvrir. Tu pouvez faire de sorte que
chaque utilisateurs ne voit que les formulaires dont il a droit d'accs.
Bon courage.
Bonjour,
Oui bien sr, il y a d'autres contrles aprs. Tu as du remarquer les variables acces
lecture ecriture (boolean). Elles servent rcuprer les divers droits sur les formulaires
et les grer. D'ailleurs, chaque formulaire indique selon l'utilisateur ses droits en lecture
et criture.
Concernant ta remarque quant faire un formulaire de menu avec masquage ou non des
formulaires permis, j'y avais pens, mais a risque de prendre tellement de temps

dvelopper et tre d'une telle complexit que j'ai opt pour cette solution.
Mais peut tre devrais-je creuser nouveau cette ide ?
Rpondre avec citation

4.

0 0Crer une entre Blog

15/07/2011, 13h48#4

DMboup

Membre expriment

Inscrit en
juin 2003
Messages
1 211
Points
1 526

Envoy par Rmi GAUDINAT

...
Concernant ta remarque quant faire un formulaire de menu avec masquage ou non des
formulaires permis, j'y avais pens, mais a risque de prendre tellement de temps
dvelopper et tre d'une telle complexit que j'ai opt pour cette solution...
Tout dpend de comment tu t'y prend, mais je ne vois pas de difficult.
Une requte du genre

Code :
1
2

Slectionner tout - Visualiser dans une fentre part

SELECT FORMULAIRE_AUTORISATION.* FROM FORMULAIRE_AUTORISATION WHERE


((ID_USER = " & numero_user & ") AND (ACCES=false))

te permet d'avoir les formulaires que l'utilisateur connect est autoris voir.
Il suffit juste d'afficher des liens avec des actions pour l'ouverture des formulaires.
a ne prend pas de temps et c'est pas complexe aussi.