Button Home/Top/Zurück


Benutzer/Benutzergruppen feststellen




Während der Implementierung einer Mehrbenutzeranwendung passiert es immer wieder, daß bestimmte Funktionalitäten nur bestimmte Benutzer oder Benutzergruppen zur Verfügung gestellt werden dürfen.
Nun ist es recht einfach den aktuell angemeldeten Benutzer festzustellen, mit den Benutzergruppen, denen dieser Benutzer angehört sieht es ein wenig anders aus.

Ach so, den aktuellen Datenbankbenutzer bekommt man über das Application-Objekt heraus, den aktuellen Windows-User aus dem Environment.
Sub Dummy()
    '
    ' Der aktuelle Datenbankuser
    '
    MsgBox Application.CurrentUser
    '
    ' Der aktuelle Windows-User
    '
    MsgBox Environ("Username")
 
End Sub

Die Benutzer- und Gruppeninformationen sind im Workspace-Objekt der DBEngin zu finden. Die Struktur sieht dort wie folgt aus:
DBEngin(0): aktuelle DBEngin
   |
   + Workspace(0): aktueller Workspace
         |
         + Users             : Liste aller Benutzer
         |   | 
         |   + User          : Ein Benutzer
         |       |
         |       + Groups    : Liste der Benutzergruppen, denen der Benutzer angehört
         |            |
         |            + Group: Eine Benutzergruppe des Benutzers
         |
         + Groups            : Liste aller Benutzergruppen des Workspace
              |
              + Group        : Eine Benutzergruppe des Workspace
                  |
                  + Users    : Liste aller Benutzer dieser Gruppe
                      |
                      + User : Ein Benutzer dieser Gruppe
	  
Man kann sich also auf zwei Wegen durch diese Struktur hangeln, um alle Gruppen herauszubekommen, denen ein Benutzer angehört.
Der sinnvollere Weg ist wohl, sich erst aus der Users-Auflistung des Workspaces den gesuchten Benutzer heraus zu suchen, um anschließend alle ihm zugeordneten Benutzergruppen zu durchlaufen.

Dazu folgendes Code-Beispiel:
Function GetUserGroups(sUserName As String) As String
'
' GetUserGroups()
'
' Ermittlung der Benutzergruppen, denen ein Benutzer
' angehört.
'
' IN:   sUserName   Name des Benutzers, für den die
'                   Gruppen ermittelt werden sollen
'
' OUT:  String, in dem alle Benutzergruppen (durch
'       Semikolon getrennt aufgeführt sind.
'
Dim g As Group      ' Gruppe aus dem Workspace
Dim a As User       ' Eine Benutzerdefinition
Dim i As Integer    ' Zähler
Dim j As Integer    ' noch ein Zähler
Dim sRet As String  ' Return-String
    '
    ' Defaultvalue ist eine leere Gruppenliste
    '
    sRet = ""
    '
    ' Parameter prüfen
    '
    If Trim(sUserName) = "" Then GoTo GetUserGroups_Exit:
    '
    ' Schleife über alle Benutzer der Datenbank.
    '
    For i = 0 To DBEngine.Workspaces(0).Users.Count - 1
        '
        ' nächsten Benutzer holen
        '
        Set a = DBEngine.Workspaces(0).Users(i)
        '
        ' ist der gesuchte Benutzer gefunden ?
        '
        If UCase(a.Name) = UCase(sUserName) Then
            '
            ' Schleife über alle Gruppen des Benutzers
            '
            For j = 0 To a.Groups.Count - 1
                '
                ' nächste Gruppe holen
                '
                Set g = a.Groups(j)
                '
                ' Namen der Gruppe in die Liste aufnehmen
                '
                sRet = sRet & g.Name & ";"
            Next j
            GoTo GetUserGroups_ListeKomplett
        End If
 
    Next i
 
GetUserGroups_ListeKomplett:
    If sRet <> "" Then
        '
        ' Für den Fall, daß mind. eine Gruppe gefunden
        ' wurde, muß das letzte Semikolon aus der Liste
        ' entfernt werden.
        '
        sRet = Left(sRet, Len(sRet) - 1)
    End If
    '
    ' Speicherbereicht freigeben
    '
    Set g = Nothing
    Set a = Nothing
    '
    ' Nicht vergessen, die Liste zurückzugeben.
    '
GetUserGroups_Exit:
 
    GetUserGroups = sRet
End Function

Dann könnte es auch von Interesse sein, welcher Benutzer einer bestimmten Gruppe zugeordnet sind.
Das geht u.a. so:
Function GetGroupUsers(sGroupName As String) As String
'
' GetGroupUsers()
'
' Ermittlung aller Benutzer, die einer
' bestimmten Benutzergruppe angehören.
'
' IN:   sGroupName  Name der Gruppe, für den die
'                   Benutzer ermittelt werden sollen
'
' OUT:  String, in dem alle Benutzer der Gruppe (durch
'       Semikolon getrennt aufgeführt sind.
'
Dim g As Group      ' Gruppe aus dem Workspace
Dim a As User       ' Eine Benutzerdefinition
Dim i As Integer    ' Zähler
Dim j As Integer    ' noch ein Zähler
Dim sRet As String  ' Return-String
    '
    ' Defaultvalue ist eine leere Gruppenliste
    '
    sRet = ""
    '
    ' Parameter prüfen
    '
    If Trim(sGroupName) = "" Then GoTo GetGroupUsers_Exit:
    '
    ' Schleife über alle Benutzergruppen des Workspaces.
    '
    For i = 0 To DBEngine.Workspaces(0).Groups.Count - 1
        '
        ' nächsten Benutzergruppe holen
        '
        Set g = DBEngine.Workspaces(0).Groups(i)
        '
        ' ist die gesuchte Benutzergruppe gefunden ?
        '
        If UCase(g.Name) = UCase(sGroupName) Then
            '
            ' Schleife über alle Benutzer der Gruppe
            '
            For j = 0 To g.Users.Count - 1
                '
                ' nächsten Benutzer holen
                '
                Set a = g.Users(j)
                '
                ' Namen der Gruppe in die Liste aufnehmen
                '
                sRet = sRet & a.Name & ";"
            Next j
            GoTo GetGroupUsers_ListeKomplett
        End If
 
    Next i
 
GetGroupUsers_ListeKomplett:
    If sRet <> "" Then
        '
        ' Für den Fall, daß mind. eine Gruppe gefunden
        ' wurde, muß das letzte Semikolon aus der Liste
        ' entfernt werden.
        '
        sRet = Left(sRet, Len(sRet) - 1)
    End If
    '
    ' Speicherbereicht freigeben
    '
    Set g = Nothing
    Set a = Nothing
    '
    ' Nicht vergessen, die Liste zurückzugeben.
    '
GetGroupUsers_Exit:
 
    GetGroupUsers = sRet
End Function

Die Module gibt es, wie immer, als Textfiles zum downloaden.
Modul Icon Benutzer/Benutzergruppen ermitteln als Textfile zum Downloaden

Button Home/Top/Zurück