Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Access > Contribuez
Contribuez Access : Vos contributions. Postez ici vos codes sources, conseils, astuces et autres propositions. Ce forum n'est pas un forum technique mais destiné aux contributions pour www.developpez.com
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 14/07/2011, 18h00   #1
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Par défaut gestion des droits d'accès aux formulaires

*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 :
Code :
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'),
avec un index unique sur les champs ID_FORM et ID_USER

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
Code :
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
Et le reste à l'ouverture du formulaire
Code :
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
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.
*merci d'avance*
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/07/2011, 19h50   #2
Membre Expert
 
Inscription : juin 2003
Messages : 1 203
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 203
Points : 1 413
Points : 1 413
Bonjour

C'est un bon début mais incomplet quand même. Après l'ouverture de ton formulaire pour ceux qui ont le droit, ya t-il d'autres contrôle 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 accéder quand essayant de les ouvrir. Tu pouvez faire de sorte que chaque utilisateurs ne voit que les formulaires dont il a droit d'accès.

Bon courage.
__________________
Amicalement
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 12h12   #3
Membre du Club
 
Homme Rémi GAUDINAT
Inscription : juin 2010
Messages : 53
Détails du profil
Informations personnelles :
Nom : Homme Rémi GAUDINAT
Âge : 43

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : juin 2010
Messages : 53
Points : 47
Points : 47
Envoyer un message via Skype™ à Rémi GAUDINAT
Citation:
Envoyé par DMboup Voir le message
Bonjour

C'est un bon début mais incomplet quand même. Après l'ouverture de ton formulaire pour ceux qui ont le droit, ya t-il d'autres contrôle 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 accéder quand essayant de les ouvrir. Tu pouvez faire de sorte que chaque utilisateurs ne voit que les formulaires dont il a droit d'accès.

Bon courage.
Bonjour,
Oui bien sûr, il y a d'autres contrôles après. Tu as du remarquer les variables acces lecture ecriture (boolean). Elles servent à récupérer les divers droits sur les formulaires et à les gérer. 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 à développer et être d'une telle complexité que j'ai opté pour cette solution.
Mais peut être devrais-je creuser à nouveau cette idée ?
Rémi GAUDINAT est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 15/07/2011, 12h48   #4
Membre Expert
 
Inscription : juin 2003
Messages : 1 203
Détails du profil
Informations personnelles :
Localisation : Sénégal

Informations forums :
Inscription : juin 2003
Messages : 1 203
Points : 1 413
Points : 1 413
Citation:
Envoyé par Rémi GAUDINAT Voir le message
...
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 à développer et être d'une telle complexité que j'ai opté pour cette solution...
Tout dépend de comment tu t'y prend, mais je ne vois pas de difficulté.

Une requête du genre
Code :
1
2
 
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.
__________________
Amicalement
DMboup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 21h57.


 
 
 
 
Partenaires

Hébergement Web