Exemplul se aplica pentru Access 2007 & 2010 si este o idee inspirata din exemplul Northwind si alte variante.
Scopul demonstratiei: In functie de userul care se conecteaza la aplicatie, acesta va avea drepturi de "modificare" (inclusiv adaugare de inregistrari noi sau stergerea celor vechi) sau drept de "citire" (adica poate doar sa VADA inregistrarile existente, fara sa le poata modifica)
Asa ca sa incepem:
PRE1. Pentru gestionarea utilizatorilor avem tabela tblUsers care contine urmatoarele informatii:
- UserName = Numele utilizatorului
UserPassword = Parola utilizatorului (in acest exemplu este "in clar", si nefiind securizata in nici un fel nu recomand aplicarea ei in "productie")
UserRights = Drepturile utilizatorului la nivelul formelor pe care le va deschide RW/RO
- admin cu parola admin cu drepturi RW si
user cu parola user cu drepturi RO
Principiul de functionare:
1. Formularul de LogIn (frmLogIn) - este unul foarte simplu - cere un nume de utilizator si o parola apoi se apasa butonul Login - aici este "greul":
Cod: Selectaţi tot
Private Sub cmdLogin_Click()
'Verifica sa existe completat un nume de utilizator
If IsNull(txtUserName.Value) Or txtUserName.Value = "" Then
MsgBox "Trebuie introdus un nume de utilizator!", vbCritical
txtUserName.SetFocus
Exit Sub
End If
'Verifica sa existe completata o parola
If IsNull(txtPassword.Value) Or txtPassword.Value = "" Then
MsgBox "Trebuie introdusa o parola!", vbCritical
txtPassword.SetFocus
Exit Sub
End If
'Verifica in tblUsers daca parola este cea pe care o "stie" utilizatorul
If txtPassword.Value = DLookup("UserPassword", "tblUsers", "[UserName]='" & txtUserName.Value & "'") Then
'Creaza 2 variabile globale unde stocheaza numele utilizatorului si drepturile sale
TempVars.Add "pUserName", txtUserName.Value
TempVars.Add "pUserRights", DLookup("UserRights", "tblUsers", "[UserName]='" & txtUserName.Value & "'")
'Daca parola este corecta inchide formularul de LogIn si deschide "maniul principal"
DoCmd.Close acForm, "frmLogIn", acSaveNo
DoCmd.OpenForm "Switchboard"
Else
MsgBox "Parola incorecta. Reincercati", vbOKOnly, "Login Error"
End If
End Sub
Daca vreti se poate "precompleta" numele userului cu cel al utilizatorului curent conectat pe statia Windows:
Cod: Selectaţi tot
Private Sub Form_Load()
'Pre-completeaza numele userului cu cel care este logat pe statia Windows
txtUserName.Value = Environ("Username")
txtPassword.SetFocus
End Sub
Cod: Selectaţi tot
Private Sub Form_Load()
'Asigura deschiderea formularului in functie de permisiunile utilizatorului
If [TempVars]![pUserRights] = "RW" Then
Me.AllowAdditions = True
Me.AllowDeletions = True
Me.AllowEdits = True
Else
Me.AllowAdditions = False
Me.AllowDeletions = False
Me.AllowEdits = False
End If
End Sub
Deasemenea se poate completa tabela tblUsers si cu numele formularului in asa fel incat sa aveti o combinatie USER-FORM-DREPTURI si astfel puteti da permisiuni diferite pe fiecare form in parte.
3. Si pentru a face formul de LogIn functional inca de la deschiderea bazei de date se foloseste un macro AutoExec pentru ca acesta se va executa la fiecare deschidere a bazei de date (o alta varianta ar fi setarea in proprietatile bazei a unui form de start).
Dupa cum se vede, acest macro nu are decat 2 linii
Prima se bazeaza pe conditia Not [CurrentProject].[IsTrusted] adica daca proiectul NU este executat dintr-o zona sigura - va afisa un formular frmStart in care doar i se explica utilizatorului ca trebuie sa activeze continutul ("Enable this content").
Altfel daca proiectul este executat dintr-o zona sigura ([CurrentProject].[IsTrusted]) - se va lansa direct frmLogIn pentru a cere credentialele utilizatorului.
In final la deschiderea bazei de date te va intreba userul si parola si in functie de cei 2 useri de test (admin sau user) poti deschide formularele frmCategorii si frmProduse cu drepturile corespunzatoare.