dr.cornwallis
Goto Top

MS Access 2010 Berechtigung für Button(Klick)

Liebe Gemeinde,

ich bräuchte bitte Hilfe für folgendes Szenario:

Auf einem Formular habe ich ein Textfeld, dieses gibt den aktuellen Windows User aus (fOSUserName()).

Auf dem Formular sind auch 3 Buttons, A, B und C, weiters gibt es einen Table(Berechtigungen) mit 2 Feldern: "Name Mitarbeiter" und "Berechtigung"(A,B oder C).

Nun möchte ich für jeden Button Berechtigungen setzen, auf Deutsch übersetzt:

Ist der ausgelesene User(im Textfeld) im Table "Berechtigungen" vorhanden, wenn ja, hat dieser die Berechtigung für zB. "A"(=Feldwert im selben Table) dann kann er auch mit dem Button das Formular "A" dahinter öffnen, ansonsten Msgbox "keine Berechtigung".

Schlussendlich soll die Struktur dann so funktionieren:

Berechtigung "A": darf alle 3 Buttons klicken bzw. öffnen(quasi eine Full Berechtigung)
Berechtigung "B": darf nur die Buttons bzw. Formulare "B" und "C" öffnen
Berechtigung "C": darf nur den Button bzw. Formular "C" öffnen


Leider überschreitet das meine derzeitigen VBA Skills komplett, bitte um Hilfe!


Besten Dank!


Gruß Dr.


PS: Buttonnamen und Berechtigungen habe ich hier vereinfacht angegeben, das würde ansonsten zu sehr verwirren, also A,B und C sind nichts weiter als Platzhalter.

Content-Key: 311551

Url: https://administrator.de/contentid/311551

Ausgedruckt am: 19.03.2024 um 05:03 Uhr

Mitglied: SlainteMhath
SlainteMhath 03.08.2016 um 15:40:39 Uhr
Goto Top
Moin,

am einfachsten geht das wohl mit der Dlookup Funktion:

Select case dlookup("Rechte","tblRechte","user='" & strUser & "' and Button='" & strButton &"' " )  
  case "A":  
    [...]
  case "B":  
    [...]
  case else:
    [...]
end select

Ohne Gewähr face-smile
Mitglied: Dr.Cornwallis
Dr.Cornwallis 03.08.2016 um 16:35:11 Uhr
Goto Top
Besten Dank, kann ich leider erst morgen probieren.

Gruß

Dr.
Mitglied: vossi31
vossi31 03.08.2016 um 17:34:27 Uhr
Goto Top
Moin,

wenn du es benutzerfreundlicher machen willst, mache nicht
ansonsten Msgbox "keine Berechtigung".
sondern aktiviere/deaktiviere die Buttons in Abhängigkeit des Abfrageergebnisses.

Henning
Mitglied: Dr.Cornwallis
Dr.Cornwallis 03.08.2016 um 18:22:11 Uhr
Goto Top
Zitat von @vossi31:

Moin,

wenn du es benutzerfreundlicher machen willst, mache nicht
ansonsten Msgbox "keine Berechtigung".
sondern aktiviere/deaktiviere die Buttons in Abhängigkeit des Abfrageergebnisses.

Henning

Moin,

hört sich interessant an, dh. also man könnte auch gleich beim öffnen der DB das richtige Formular öffnen lassen?
Leider habe ich keinen Plan wie man das programmiert, könntest du mir grob erklären wie man das am Besten realisiert(VBA Anfänger)?

Dankeschön!

Gruß

Dr.
Mitglied: 129813
129813 03.08.2016 aktualisiert um 18:37:59 Uhr
Goto Top
Hi,
dh. also man könnte auch gleich beim öffnen der DB das richtige Formular öffnen lassen?
write a function which checks the username, for example:
Public Function StartUpCode()
    Select Case Application.CurrentUser
        Case "UserA"  
            DoCmd.OpenForm "form1"  
        Case "UserB"  
            DoCmd.OpenForm "form2"  
        Case Else
            MsgBox "Don't know this user", vbExclamation  
    End Select
End Function
then create an AutoExec macro, an execute this function in this macro.

screenshot

Regards
Mitglied: Dr.Cornwallis
Dr.Cornwallis 03.08.2016 aktualisiert um 18:51:00 Uhr
Goto Top
Zitat von @129813:

Hi,
dh. also man könnte auch gleich beim öffnen der DB das richtige Formular öffnen lassen?
write a function which checks the username, for example:
> Public Function StartUpCode()
>     Select Case Application.CurrentUser
>         Case "UserA"  
>             DoCmd.OpenForm "form1"  
>         Case "UserB"  
>             DoCmd.OpenForm "form2"  
>         Case Else
>             MsgBox "Don't know this user", vbExclamation  
>     End Select
> End Function
> 
then create an AutoExec macro, an execute this function in this macro.

screenshot

Regards
You're the best, thanks a lot, i'll try it tomorrow.

But with this code i have to add each username as a case right?
I got a table with all users + permission(field), so i think i'll need the dlookup Funktion.


All the best!
Mitglied: vossi31
vossi31 03.08.2016 um 19:59:09 Uhr
Goto Top
Das geht aber so nicht für dein Beispiel
Berechtigung "A": darf alle 3 Buttons klicken bzw. öffnen(quasi eine Full Berechtigung)
Berechtigung "B": darf nur die Buttons bzw. Formulare "B" und "C" öffnen
Berechtigung "C": darf nur den Button bzw. Formular "C" öffnen
Bei "A" und "B" sind ja mehrere forms möglich.
Ich dachte eher an so etwas (siehe SlainteMhath und auch ungeprüft):

Select case dlookup("Rechte","tblRechte","user='" & strUser & "' and Button='" & strButton &"' " )
case "A":
Button1.Enabled = True
Button2.Enabled = True
Button3.Enabled = True
case "B":
Button1.Enabled = False
Button2.Enabled = True
Button3.Enabled = True
...
case else:
...
end select
Mitglied: 129813
129813 03.08.2016 aktualisiert um 20:14:38 Uhr
Goto Top
I got a table with all users + permission(field), so i think i'll need the dlookup Funktion.
This was only an example, you can do what you need inside the function and combine it with the above dlookup !
Mitglied: Dr.Cornwallis
Dr.Cornwallis 04.08.2016 um 08:14:05 Uhr
Goto Top
Moin,

ich habe leichte Schwierigkeiten mit dem oa. Code, ich verstehe die Syntax nicht ganz, bzw. wie ich diesen an meine DB anpassen muss.

Im Table Berechtigungen habe ich folgende Felder:

UserID(da wird der Windows Login User eingetragen), Name Mitarbeiter und Berechtigungen(DM,GL oder DL)

Am Startformular(wo auch die 3 Buttons sind) gibt es ein Textfeld wo der Username ausgelesen und angezeigt wird (fOSUserName).

mein Code sieht bisher so aus(unvollständig):

Function PermissionRead()
Select Case DLookup("Berechtigungen", "Berechtigung", "userID='" & Forms!frm_start!txt3 & "' and Button='" & strButton & "' ")  
  Case "DM":  
    Umschaltfläche83.Enabled = True
    Umschaltfläche84.Enabled = True
    Umschaltfläche85.Enabled = True
  Case "GL":  
    Umschaltfläche83.Enabled = False
    Umschaltfläche84.Enabled = True
    Umschaltfläche85.Enabled = True
  Case "DL":  
    Umschaltfläche83.Enabled = False
    Umschaltfläche84.Enabled = False
    Umschaltfläche85.Enabled = True
  Case Else:
    MsgBox "User nicht erkannt bzw. keine Berechtigung", vbCritical, "Hinweis"  
End Select
End Function

Ich weiß nicht was ich mit dem "strButton" anfangen soll..bitte um Hilfe.


Vielen Dank!


Gruß

Dr.
Mitglied: Dr.Cornwallis
Dr.Cornwallis 04.08.2016 aktualisiert um 08:31:05 Uhr
Goto Top
Update:

Function PermissionRead()
Select Case DLookup("Berechtigungen", "Berechtigung", "userID" = "'& Forms!frm_start!Text3 '")  
  Case "DM":  
    Umschaltfläche83.Enabled = True
    Umschaltfläche84.Enabled = True
    Umschaltfläche85.Enabled = True
  Case "GL":  
    Umschaltfläche83.Enabled = False
    Umschaltfläche84.Enabled = True
    Umschaltfläche85.Enabled = True
  Case "DL":  
    Umschaltfläche83.Enabled = False
    Umschaltfläche84.Enabled = False
    Umschaltfläche85.Enabled = True
  Case Else:
    MsgBox "User nicht erkannt", vbCritical, "Hinweis"  
End Select
End Function

Mit diesem Code funktioniert schon mal der "Case Else" face-smile

Danke!
Mitglied: 129813
Lösung 129813 04.08.2016 aktualisiert um 08:39:35 Uhr
Goto Top
No your formatting is incorrect...
Select Case DLookup("Berechtigung", "Berechtigungen", "userID = '" & Forms!frm_start!Text3 & "'"

Note: The first parameter needs to be the field name which you want to receive and the second is the table name! The third is a where clause without "where"
https://support.office.com/de-de/article/DLookup-Funktion-8896cb03-e31f- ...
Mitglied: Dr.Cornwallis
Dr.Cornwallis 04.08.2016 um 08:43:58 Uhr
Goto Top
IT WORKS face-smile

Function PermissionRead()
Select Case DLookup("Berechtigungen", "Berechtigung", "userID = '" & Forms!frm_start!Text3 & "'")  
  Case "DM":  
    Forms!frm_start!Umschaltfläche83.Enabled = True
    Forms!frm_start!Umschaltfläche84.Enabled = True
    Forms!frm_start!Umschaltfläche85.Enabled = True
  Case "GL":  
    Forms!frm_start!Umschaltfläche83.Enabled = False
    Forms!frm_start!Umschaltfläche84.Enabled = True
    Forms!frm_start!Umschaltfläche85.Enabled = True
  Case "DL":  
    Forms!frm_start!Umschaltfläche83.Enabled = False
    Forms!frm_start!Umschaltfläche84.Enabled = False
    Forms!frm_start!Umschaltfläche85.Enabled = True
  Case Else:
    MsgBox "User nicht erkannt", vbCritical, "Hinweis"  
End Select
End Function

Thanks a lot, thats it!

Greets

Dr.