Um zu prüfen, ob ein bestimmter Benutzer einer bestimmten Benutzergruppe angehört, gibt es für den aktuell eingeloggten Benutzer die RC.SessionData
, die alle Informationen über den aktuellen Benutzer zurückliefert.
Schwieriger wird es, wenn die Benutzergruppe des Context-Benutzers ermittelt werden soll. Hierbei können die folgenden Funktionen helfen.
Der initiale Anwendungsfall in folgendem Beispiel ist die Prüfung, ob ein Benutzer in einer bestimmten Benutzergruppe ist:
Dim userName: userName = RC.InputParams.Value("$$$SwitchContextUserName$$$")
Dim userGroup: userGroup = "MYUSERGROUP"
if userHasGroup(userName, userGroup) = False Then
' Ausgabe in log-Datei: Pfad\Zu\enaio\server\log
RC.Logger.Error "User " & userName & " not in usergroup " & userGroup
...
End If
...
Die eigentliche Prüfung, ob eine bestimmte Benutzergruppe in der für diesen Benutzer zugewiesenen Benutzergruppen zu finden ist:
Function userHasGroup(username, group_search)
Dim userGroups: userGroups = getUserGroupsForUserGuid(username)
userHasGroup = False
For Each group In userGroups
If group = group_search Then
userHasGroup = True
Exit For
End If
Next
End Function
Die Benutzergruppen an Hand eines Benutzernamens direkt auslesen ist nicht vorgesehen. Es ist aber alternativ möglich, den Benutzer an Hand seiner osguid
auszulesen. Hier kann mit dieser Funktion ausgeholfen werden:
Function getUserGroupsForUserGuid(userName)
Dim userGroups: userGroups = Array()
Dim JobInputParameter: Set JobInputParameter = RC.NewJobsParams
Dim JobOutputParameter: Set JobOutputParameter = RC.NewJobsParams
RC.Logger.Error "USERGUID: " & getUserGUIDByName(userName)
With JobInputParameter
.Value("Flags") = 0
.Value("UserGUID") = getUserGUIDByName(userName)
End With
RC.Jobs.mng.GetUserGroups jobInputParameter, jobOutputParameter
Dim Result : Set Result = CreateObject("MSXML2.DOMDocument")
Result.loadXml(jobOutputParameter.Value("GroupList"))
Set nodes = Result.SelectNodes("//AdmInfo/Groups/Group")
For Each node In nodes
group = node.selectSingleNode(".//@name").text
If Len(group) > 0 Then
ReDim Preserve userGroups(UBound(userGroups) + 1)
userGroups(UBound(userGroups)) = group
End If
Next
getUserGroupsForUserGuid = userGroups
End Function
Da beim $$$SwitchContextUserName$$$
die osguid
nicht direkt zur Verfügung steht, kann die osguid
mit dieser Funktion ermittelt werden:
Function getUserGUIDByName(userName)
Dim userGuid: userGuid = ""
Dim JobInputParameter: Set JobInputParameter = RC.NewJobsParams
Dim JobOutputParameter: Set JobOutputParameter = RC.NewJobsParams
With JobInputParameter
.Value("Flags") = 0
.Value("User") = userName
End With
RC.Jobs.mng.GetUserAttributes jobInputParameter, jobOutputParameter
Dim Result : Set Result = CreateObject("MSXML2.DOMDocument")
Result.loadXml(jobOutputParameter.Value("XmlInfo"))
Set nodes = Result.SelectNodes("//AdmInfo/Users/User")
For Each node In nodes
userGUID = node.selectSingleNode(".//@osguid").text
Next
getUserGUIDByName = userGUID
End Function