Wiki der Access Code Library

Gemeinsam zu mehr Effizienz in der Anwendungserstellung

Login-Prüfung

Aus Access Code Library
Version vom 19:52, 7. Nov. 2010 bei Josef Pötzl (Diskussion | Beiträge)
(Unterschied) ← Nächstältere Version | Aktuelle Version (Unterschied) | Nächstjüngere Version → (Unterschied)
Wechseln zu: Navigation, Suche
Programmier-Konzepte

Inhalt

Der unten angeführte Code zeigt nur ein Prinzip und stellt keine fertige Lösung dar.

Inhaltsverzeichnis

Ausgangsbasis

  • Mit einer Anmeldung werden bestimmte Bereiche der Anwendung freigeschalten
  • Die Anwendung ist aber auch ohne Anmeldung bedienbar
  • Sobald sich der Anwender anmeldet, sollen die "gesperrten" Bereiche darauf reagieren

Eingesetzte Elemente

  • Formular für Eingabe der Loginkennung
  • Klasse für die Informationsweitergabe der Anmeldung
  • Formular mit speziellen Bereichen, die nur angemeldeten Usern zur Verfügung stehen.

Konzept

Klasse UserLogon

  • Ist die Verbindungsklasse zu den gesperrten Bereichen.
  • Löst ein Ereignis aus, wenn sich der Login-Status ändert

Code-Prinzip:

' Ereignis für Weitergabe des Login-Status
Public Event LoginChanged(ByVal UserLoggedOn as Boolean, ByVal UserName as String)
' LoggedOn ... True = User ist angemeldet, Fals = User hat sich abgemeldet

' Login-Methode
Public Function Login(ByVal NewUsername As String, ByVal Password As String) as Boolean
  ... Login prüfen usw.
  If LoginWarErfolgreich then
     RaiseEvent LoginChanged(True, NewUsername)
  End If
' Diese Prozedur wird später vom Login-Formular verwendet
End Function
 
Public Sub Logout()
  ... Intern aufräumen
  RaiseEvent LoginChanged(False, Me.Username)
End Sub
 
'Hilfsprozedur um bei Bedarf den Anmeldestatus abzufragen:
Public Property Get IsLoggedIn() as Boolean
   ...
End Property
 
' .. und auch gleich noch den aktuell angemeldeten Usernamen:
Public Property Get UserName() As String
  ...
End Property

Hilfsmodul für Instanzierung

Da man von dieser Klasse vermutlich nur eine Instanz benötigt, könnte man diese Instanz über ein allgemeines Modul erstellen.

Private m_UserLogon As UserLogon
Public Property Get CurrentUserLogon() As UserLogon
   If m_UserLogon Is Nothing then
      set m_UserLogon = New UserLogon
   End If
   Set CurrentUserLogon = m_UserLogon
End Property

Verwendung in einem Formular

In einem Formular, das nur für eingeloggte User volle Funktionalität ermöglichen soll, wird die Klasse UserLogon folgendermaßen verwendet:

Private WithEvents m_CurrentUserLogon As UserLogon
 
'm_CurrentUserLogon einstellen:
Private Sub Form_Load()
   Set m_CurrentUserLogon = CurrentUserLogon
   Call aktiviereSonderBereiche(m_CurrentUserLogon.IsLoggedIn)
End Sub
 
'Auf Ereignis bei Anmeldungsänderung reagieren
Private Sub m_CurrentUserLogon_LoginChanged(ByVal UserLoggedOn as Boolean, ByVal UserName as String)
   call aktiviereSonderBereiche(UserLoggedOn)
End Sub
 
'Hilfsfunktion zum Einstellen der Steuerelemente:
Private Sub aktiviereSonderBereiche(ByVal bAktivieren as Boolean)
   'z. B.:
   Me.cmdDeleteRecordset.Enabled = bAktivieren 
   ...
End Sub


Beispiel

Login-Steuerung

Download: LoginSteuerung.zip (64kB)

Dieses Beispiel ist eine Weiterentwicklung eines Beispiels aus einer Diskussion im MS-Office-Forum.

Im Modul modApplication kann zwischen zwei Varianten zur Passwort-Prüfung ausgewählt werden:

  • Prüfung des Windows-Benutzers mittels Win-API
  • Prüfung über eine Tabelle mit einem md5-verschlüsselten Passwort (Test-Account: Name = Tester, Passwort = xxx)

Arr_l.png Benutzerverwaltung und Login | Zugriffsschutz und Lizenzprüfung Arr_r.png