Wie kann ich nach USER-Login Benutzergruppen-definierte Formulare öfnen (VBA) ?

Hallo zusammen,

bin was VBA und sonstiges angeht nicht der Checker, habe es jedoch geschafft, mithilfe diverser Foren in Access 2013 ein Grundgerüst zu erstellen, welches mit Hilfe von Tabellen eine User definierte Anmeldung durchführt und soweit auch funktioniert. (siehe Screenshot BILD 1)

Jetzt komme ich nicht weiter, denn als nächstes möchte ich nach dem erfolgreichen LOGIN in Abhängigkeit der zugeordneten Benutzergruppe (entweder „1“ für ADMIN-Rechte oder „2“ für Standard-Userrechte) das entsprechende Formular sofort öffnen, damit der Standard-USER keine Möglichkeit hat, auf die Struktur und die einzelnen Elemente der Datenbank zuzugreifen.
Zum Schluss werde ich die Datenbank als *.accde zur Verfügung stellen.

WIE muss nachfolgender VBA-Code erweitert / ergänzt werden, damit bei Benutzergruppe „2“ das Formular „frmUSER“ direkt geöffnet wird ?

VIELEN DANK

Hallo,

das Formular lässt ich mit DoCmd OpenForm „frmFormName“ öffnen.

Aber … man sollte in jedem Formular beim öffnen nochmal überprüfen ob die entsprechenden Rechte vorliegen und wenn nicht, das Formular sofort wieder schließen.
Auch sollte man beim Öffnen der Anwendung die entsprechenden Properties einstellen um zu verhindern, das z.B. jemand mittels F11 an die Tabellen herankommt. bzw. es verhindern, das man mittels öffnen in den Entwurfsmodus wechseln kann.

z.B. CurrentProject.Properties(„AllowBypassKey“) = False

Dies ist zwar keine Schutz gegen böswillige Manipulationen, denn man kann eine AccessDB nicht vollkommen schützen, aber gegen „normale“ Anwender hilft es schon.

btw. Ich bin schon lange weg von Benutzer/Password Eingaben, sondern ich nehme mir den Windows Benutzername und schaue dann in eine Tabelle mit den entsprechenden Rechten. Das spart dem Anwender das login und er bekommt von mir nur die Steuerelement zu sehen, die für ihn bestimmt sind.

Tschau
Peter

Hallo Peter,

ich hatte gebeten, den angegebenen VBA so erweitern, dass a) die Benutzergruppe ausgelesen und b) bei Nutzergruppe „2“ das Formular „frmUSER“ geöffnet wird.

Ich kenne mich mit VBA NICHT aus und kann auch kein VBA.

Daher sind zwar deine Lösungen richtig, jedoch kann ich diese nicht programmieren.

DANKE

Hallo,

um den Code zu vervollständigen braucht man die Info in welcher Tabelle und in welchem Feld die Rechte gespeichert sind.

Das würde dann auch mit einem DLookup funktionieren, etwa so
iRechte = DLookup(„RechteFeld“,„TabMitRechten“,"BenutzerID = " & lngBenutzerID

Das Formular öffnet man mit
if iRechte = 2 then
DoCmd OpenForm „frmUser“
endif

Tschau
Peter

Hallo Peter,

danke dir auch für diese Info.
Nachfolgend die Beziehungen und ein Screenshot der tblBenutzergruppen

Mein Problem besteht nach wie vor dahin, dass der User, welcher sich mit den Benutzerrechten „2“ bzw. BenutzergruppeID „5“ anmeldet, sofort nach LOGIN das frmUSER geöffnet bekommt.

ICH trage die USER in die Tabellen ein und vergebe die Zugriffsrechte.
Daher habe auch nur ich als ADMIN die Benutzergruppe „1“ bzw. BenutzergruppeID "4"

tblBenutzergruppen

Reicht diese Info, damit du mir einen fertigen VBA sendest UND mir vor allem zeigst, an welcher Stelle er wie eingefügt werden soll.

Zum Schluß wandle ich die Datenbank in das Format .accde um, damit keiner mehr Änderungen an der ONLINE-Struktur vornehmen kann.

Vielen Dank für deine Hilfe, Jochen

Hallo Jochen,

Ok, versuchen wir es mal weiter.

Was mir nicht ganz klar wird, sind die Tabellenbeziehungen der Benutzerrecht. So wie die Beziehungen definiert sind ist es möglich, das ein Benutzer mehrere Benutzerrechte haben kann (1->n Beziehung); ist das so gewollt?

  1. würde ich eine Abfrage erstellen. Die von den 3 Tabellen, die Felder BenutzerID,BenutzergruppeID,Benutzergruppe enthält. Nennen wir sie mal „qryBenutzerrechte“

  2. Dann ein DLookup auf diese Abfrage loslassen.
    DLookup(„Benutzergruppe“,„qryBenutzerrechte“,"BenutzerID = " & lngBenutzerID)

Nun zu deinem Code, in deinem Code :

     MsgBox "Anmeldung erfolgreich" '  danach folgende Zeilen
     
   Dim iRechte as Long

     iRecht = NZ(DLookup(("Benutzergruppe","qryBenutzerrechte","BenutzerID = " & lngBenutzerID))
     if iRechte = 2 then
         DoCmd.OpenForm "frmUser"
     else
           ' irgendwas anderes tun oder auch nichts
     endif

Vielleicht löst das dein Problem, ansonsten schick mir ein PM (ewt. kannst du mir ja auch die DB schicken und das bau ich es dir ein).

Tschau
Peter