Autor Thema: ACL User der Gruppen herausfinden  (Gelesen 4392 mal)

Offline DannyCrown

  • Junior Mitglied
  • **
  • Beiträge: 93
  • Geschlecht: Männlich
  • Use Kill with care - Designer Hilfe
ACL User der Gruppen herausfinden
« am: 02.12.08 - 08:38:58 »
Hallo Forum,

habe mal wieder ein Problem. Habe schon viel hier im Forum gesucht und schon viel ausprobiert aber bis jetzt hat noch nichts zum gewünschten Ergebnis geführt. Habe eine Funktion geschrieben die überprüfen soll, ob eine bestimtme Rolle bei einem User gesetzt ist. Das klappt allerdings nur, wenn der Benutzer als einzelne Person in der ACL drin steht und nicht wenn er in einer Gruppe ist. Hab es schon mit UserGroupNameList der Notessession Klasse probiert, doch diese Property liefert mir nicht das richtige Ergebnis zurück. Vll. kann mir ja jemand weiterhelfen.

Code
Function istRolleGesetzt() As Boolean

	'Aufruf der Fehlerbehandlung
	On Error Goto ErrHandler
	
	'Variablen Dekleration
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim acl As NotesACL
	Dim entry As NotesACLEntry
	Dim rückgabewert As Boolean
	
	Set db = session.CurrentDatabase
	Set acl = db.ACL
	
	rückgabewert = False

	'In der Forall Schleife werden alle Rollen des Users durchlaufen.
	'Falls er die Rolle hat wird der Rückgabewert auf True gesetzt
	If Not entry Is Nothing Then		
		Forall r In entry.Roles
			If r = "[RolleA]" Then
				rückgabewert = True
			End If
		End Forall
	End If
	
	istRolleGesetzt= rückgabewert
	
Ende:
	Exit Function	
	
ErrHandler:
	Call OutputError(Err, Erl(), Error())
	Resume Ende
	
End Function
MfG Daniel O0

Offline Axel

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.658
  • Geschlecht: Männlich
  • It's not a bug, it's Notes
Re: ACL User der Gruppen herausfinden
« Antwort #1 am: 02.12.08 - 08:41:46 »
Das Problem hatte ich auch schon öfters.

Hier eine mögliche Lösung: Prüfung der Zuordnung von Rollen mit Script


Axel
Ohne Computer wären wir noch lange nicht hinterm Mond!

Offline DannyCrown

  • Junior Mitglied
  • **
  • Beiträge: 93
  • Geschlecht: Männlich
  • Use Kill with care - Designer Hilfe
Re: ACL User der Gruppen herausfinden
« Antwort #2 am: 02.12.08 - 08:54:34 »
mh, das hatte ich auch schon hier im Forum, aber diese funktion liefer mir immer true zurück  ???

edit: Es klappt, musste die datenbank nur nochmal schließen. Danke!
« Letzte Änderung: 02.12.08 - 08:56:33 von DannyCrown »
MfG Daniel O0

klaussal

  • Gast
Re: ACL User der Gruppen herausfinden
« Antwort #3 am: 02.12.08 - 08:55:43 »
Code
Function userHasRole (Rolle As String) As Variant
	Dim session As New NotesSession
	Dim db As NotesDatabase
	Dim acl As NotesACL
	Dim aclEntry As NotesACLEntry
	
	Dim eval  As Variant
	Dim varReturn As Variant
	Dim varReturn2 As Variant
	Dim varCompare As String
	Dim Rolle2 As String
	Dim Rolle3 As String
	Dim subString As String
	
	On Error Goto userHasRoleError
	Set db = session.currentDatabase
	
	Rolle2 = Rolle
	Rolle3 = "[" + Rolle + "]"
	
	'eval = Evaluate("@UserRoles")
	eval = Evaluate("@UserNamesList")
	varReturn = Arraygetindex( eval, Rolle2)
	varReturn2 = Arraygetindex(eval, Rolle3)
	If Isnull(varReturn) And Isnull(varReturn2)  Then
		'Messagebox "nix Gefunden"
		userHasRole = False
	Else
		'Messagebox "gefunden"
		userHasRole = True
	End If
	
	Exit Function
	
userHasRoleError:
	userHasRole = False
	Msgbox "Fehler in userHasRole: " & Cstr(Err) & ": " & Error$
	Exit Function
	
End Function

Offline TRO

  • Senior Mitglied
  • ****
  • Beiträge: 296
Re: ACL User der Gruppen herausfinden
« Antwort #4 am: 02.12.08 - 10:30:06 »
Warum nicht

roles = notesDatabase.QueryAccessRoles( name$ )

??


Thomas

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: ACL User der Gruppen herausfinden
« Antwort #5 am: 02.12.08 - 10:51:43 »
weil:

Usage
If the name you specify is listed explicitly in the ACL, then QueryAccessRoles returns the roles for that ACL entry and does not check groups.
If the name you specify is not listed explicitly in the ACL, QueryAccess checks to see if the name is a member of a group in the primary address book where the program is running: on a workstation the Personal Address Book; on a server the Domino Directory.


man/frau für explizite Namen nicht die Rollen erhält, die der User über eine Gruppenzugehörigkeit zugeordnet bekommt.

Grüsse

Dau-in
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Glombi

  • Gast
Re: ACL User der Gruppen herausfinden
« Antwort #6 am: 02.12.08 - 11:14:26 »
@UserNamesList und @UserRoles liefern aber die Werte des angemeldeten Users zurück. Damit kann man nicht prüfen, welcher Rolle ein anderer User hat.

Tipp:
Mit
ret_eval =  Evaluate( |@ExpandNameList(@Dbname;"| & user & |")| )
die Gruppen herausfinden, in denen der User steht. @ExpandNameList dröselt auch Untergruppen auf. Dann über alle Einträge in der ACL iterieren und prüfen, ob das im Array ret_eval  vorkommt.
Falls ja, die zugehörigen Rollen des ACL-Eintrages zur Liste hinzufügen.

Andreas
« Letzte Änderung: 02.12.08 - 11:16:44 von Glombi »

Offline DannyCrown

  • Junior Mitglied
  • **
  • Beiträge: 93
  • Geschlecht: Männlich
  • Use Kill with care - Designer Hilfe
Re: ACL User der Gruppen herausfinden
« Antwort #7 am: 02.12.08 - 11:42:29 »
mh, hatte ja oben schon geschrieben, dass ich es so gemacht hab, wie Axel gesagt hatte, aber hab gerade mal deine Version ausprobiert, Andreas.

Aber wenn ich ret_eval =  Evaluate( |@ExpandNameList(@Dbname;"| & user & |")| ) eingebe und user hab ich auf session.username gesetzt, gibt er mir auch immer nur diesen session.username zurück. Versteh also nicht so ganz was deine Version überhaupt macht  :-:
MfG Daniel O0

Offline DAU-in

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.129
  • Geschlecht: Weiblich
  • - unterwegs -
Re: ACL User der Gruppen herausfinden
« Antwort #8 am: 02.12.08 - 11:45:44 »
Der User ist in Gruppen enthalten?
mühsam ernährt sich das Eichhörnchen

aktuelle Tätigkeit: Feldschubse

Glombi

  • Gast
Re: ACL User der Gruppen herausfinden
« Antwort #9 am: 02.12.08 - 11:47:00 »
Ja sorry, @ExpandNameList liefert die Namen aller User, die in der Gruppe inkl. aller Untergruppen vorhanden ist.

Also so herum....

Pseudo Code:

forall gruppe in db.ACL
ret_eval =  Evaluate( |@ExpandNameList(@Dbname;"| & gruppe & |")| )

'Hier dann mit ArraygetIndex prüfen, ob der betreffende User in der Gruppe ist: Falls ja, die Rollen der Gruppe zur Liste hinzufügen

end froall


Die Lösung von Axel funktioniert nur für den aktuellen User.

Andreas
« Letzte Änderung: 02.12.08 - 11:49:06 von Glombi »

BigWim

  • Gast
Re: ACL User der Gruppen herausfinden
« Antwort #10 am: 02.12.08 - 14:35:53 »
@Thomas
Zitat
Ja sorry, @ExpandNameList liefert die Namen aller User, die in der Gruppe inkl. aller Untergruppen vorhanden ist.

ich lass mich gern eines besseren belehren, aber in meiner DesignerHilfe (WindowsTitel "... 6.5.1") NotesClient 6.5.4 finde ich nichts über @ExpandNameList. Hatte schon auf eine undokumentierte Formel gehofft, aber auch Fehlanzeige.

@Danny
Du mußt Deine Funktion um einen Funktionsaufruf erweitern, die eine Gruppe in eine Namensliste auflöst.

Ansatzweise mußte ich so etwas auch mal lösen:

Code
Sub Click(Source As Button)
  Dim uiws As New NotesUIWorkspace
  Dim dbAdressbuch As NotesDatabase
  Dim db As NotesDatabase
  Dim doc As NotesDocument
  Dim docMailGruppe As NotesDocument
  Dim docCol As NotesDocumentCollection
  Dim sSearch As String
  Dim NameZugriff As NotesName
  Dim tmpString As String

	
  Set db = uiws.CurrentDatabase.Database
  Set dbAdressbuch = New NotesDatabase (db.Server, "names.nsf")
  Set doc = uiws.CurrentDocument.Document


  If dbAdressbuch Is Nothing Then
    Messagebox "Kann Adressbuch nicht öffnen",16,"keine Anzeige möglich"
    Exit Sub
  End If


  sSearch = {Type = "Group" & ListName = "} + <Name der Gruppe> + {"}
  Print "Suche nach " + sSearch


  Set docCol = dbAdressbuch.Search(sSearch, Nothing, 0)
  If docCol.Count <> 1 Then
    If docCol.Count < 1 Then
      Messagebox "MailGruppe im Adressbuch nicht gefunden",16,"Abbruch"
    Else
      Messagebox Cstr(docCol.Count) + " Dokumente im Adressbuch gefunden",16,"Abbruch"
    End If
    Exit Sub
  End If



  Set docMailGruppe = docCol.GetFirstDocument
' Namensliste aufbauen
  tmpString = ""
  Forall F1String In docMailGruppe.Members
    Set NameZugriff = New NotesName(F1String)
    tmpString = tmpString + NameZugriff.Common + Chr(13)
  End Forall
  Messagebox tmpString, 0,"Mailempfänger"
End Sub

Glombi

  • Gast
Re: ACL User der Gruppen herausfinden
« Antwort #11 am: 02.12.08 - 14:52:46 »
@ExpandNameList ist undokumentiert, funktioniert aber mind. aber Version 6.

BigWim

  • Gast
Re: ACL User der Gruppen herausfinden
« Antwort #12 am: 02.12.08 - 16:45:55 »
@thomas
Unsere Berechtigungsgruppen fangen mit einem $ bzw. mit einer # an. Damit funktioniert es (noch) nicht - werde mich morgen näher damit beschäftigen. Aber bei Gruppen, der Namen "normal" beginnen, funktioniert es bestens.

Danke für den Hinweis!

Markus

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz