Autor Thema: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle  (Gelesen 2649 mal)

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Hi,

wenn ich eine ACL-Rolle habe, z.B. [Admin], wie komme ich am einfachsten an eine Liste / Array, die alle Namen der ACL beinhaltet, welche diese Rolle haben?

Beispiel:
  - Reiner Unsinn
  - Axel Schweiss
haben in der ACL die Rolle [Admin]. Wie erhalte ich programmatisch diese Namen, wenn mir nur die Rolle [Admin] bekannt ist?


Benötige das in LS, darf aber auch @Formula sein, dann würde ich mir das über Evaluate holen.

Danke,
Matthias

P.S. ich habe das Gefühl dies geht ziemlich einfach, aber ich finde es aktuell einfach nicht.
« Letzte Änderung: 23.12.04 - 00:13:43 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #1 am: 21.12.04 - 19:10:07 »
guck mal Designer Help  IsRoleEnabled
Da musst du dann durch die ACL mit acl.GetEntry durch und prüfen ob der Eintrag IsRoleEnabled ist. Wenn ja, ab damit in ein Array
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #2 am: 21.12.04 - 19:13:31 »
Danke Ulrich, ich glaube that's it.

In der Property IsRoleEnabled war ich schon kurz drin während meiner Suche, aber auf das bin ich nicht gekommen  :P

Nochmal danke, ich wußte doch es muss eine einfache Lösung geben  :)

Matthias
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline eknori

  • @Notes Preisträger
  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 11.728
  • Geschlecht: Männlich
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #3 am: 21.12.04 - 19:16:21 »
hier noch schnell eine Hilfsfunktion um Gruppenmitglieder ( auch aus verschachtelten ) Gruppen zu extrahieren

Function GetMembersInGroup(GroupName As String) As Variant
   Dim session As New NotesSession
   Dim db As New NotesDatabase("Servernamet", "Names.NSF")
   Dim doc As NotesDocument
   Dim view As NotesView
   Set view=Db.GetView("($VIMGroups)")
   Set doc=View.GetDocumentByKey(GroupName)
   Redim tmpMembers(1) As Variant
   J=0
   
   If Not(doc Is Nothing) Then
      tmpGroupName1=Doc.GetItemValue("Members")
      GroupLowerBound1= Lbound(tmpGroupName1)
      GroupUpperBound1= Ubound(tmpGroupName1)
      For i=GroupLowerBound1 To GroupUpperBound1
         tmpGroupName2= GetMembersinGroup(tmpGroupName1(i))
         GroupLowerBound2= Lbound(tmpGroupName2)
         GroupUpperBound2= Ubound(tmpGroupName2)
         Redim Preserve tmpMembers(GroupUpperBound2+J) As Variant
         For K= GroupLowerBound2 To GroupUpperBound2
            tmpMembers(J) = tmpGroupName2(K)
            J=J+1
         Next
      Next
   Else
      Redim tmpMembers(0) As Variant
      tmpMembers(0) = GroupName
   End If
   
   GetMembersInGroup= tmpMembers
End Function

könnte für dich nützlich sein
Egal wie tief man die Messlatte für den menschlichen Verstand auch ansetzt: jeden Tag kommt jemand und marschiert erhobenen Hauptes drunter her!

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #4 am: 21.12.04 - 19:24:08 »
danke Ulrich, kann gut sein dass ich das bald brauche hier  :D

Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


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: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #5 am: 22.12.04 - 08:32:46 »
Hi,

aber Achtung mit IsRoleEnabled. Wenn ein User in einer Gruppe enthalten ist und dieser eine Rolle zugewiesen wurde, nutzt diese Property nichts. Es werden nur direkt zugewiesen Rollen erkannt.

Deshalb habe ich mir eine eigene Funktion gestrickt -> Prüfung der Zuordnung von Rollen mit Script


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

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #6 am: 22.12.04 - 23:06:42 »
Danke, Axel.

Problem dabei ist allerdings, dass ich -- unabhängig von @Username -- wissen musste, wer alles eine bestimmte Rolle hat.
Wenn man dann in der Rückgabe Gruppen hat und dies auf einzelne Personen runterbrechen muss, dann muss sowas wie Ulrich's Function herhalten, die das ganze wohl rekursiv auflöst.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #7 am: 22.12.04 - 23:23:59 »
Reicht es Dir eigentlich, wenn (wie bisher angegeben) das ganze nur auf einem Server funktioniert ? Sonst wären ja noch ein paar Erweiterungen erforderlich. Die könnte ich liefern.

Bernhard
« Letzte Änderung: 23.12.04 - 00:24:47 von koehlerbv »

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #8 am: 22.12.04 - 23:44:41 »
Nein, Bernhard, sollte auch lokal funzen. Aber trotzdem danke für Dein Angebot  :D
Trotzdem würde mich interessieren, wie Du das auf einem Server umsetzen würdest.

Eigentlich hab ich ja auch schon die Lösung, nur die rekursive Auflösung der Gruppen hab ich noch nicht implementiert.

Ah ja, hier bisherige die Umsetzung in kürze:
Code
	intCount = 0
	Set aclentry = acl.GetFirstEntry	
	While Not aclentry Is Nothing
		If aclentry.IsRoleEnabled(strRole) Then
			Redim Preserve vElemArray(intCount)
			vElemArray(intCount) = aclentry.Name
			intCount = intCount + 1
		End If			
		Set aclentry = acl.GetNextEntry(aclentry)
	Wend

Bei Ulrich's Script stört mich ein wenig die fixe Vorgabe der DB, also:
Code
Dim db As New NotesDatabase("Servernamet", "Names.NSF")

Na ja, erste Überlegung:
Code
	dbAddressBooksArray = session.AddressBooks 'db array of all address books
	Forall loop_db In dbAddressBooksArray
		If ( loop_db.IsPublicAddressBook ) Then
			'Public Address Book found !
			Set dbNAB = loop_db
			Exit Forall
		End If
	End Forall			
	
	If (dbNAB Is Nothing) Then
		'we did not find any book
		Error 1001, "A public address book could not be found !"
	End If

Allerdings hab ich da wenig Erfahrung im Bezug auf NAB-Zugriff, also ob das reicht und was ich da noch an ErrorHandling einbauen müsste.
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline Semeaphoros

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 8.152
  • Geschlecht: Männlich
  • ho semeaphoros - agr.: der Notesträger
    • LIGONET GmbH
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #9 am: 23.12.04 - 00:01:07 »
Theoretisch ist Deine Ueberlegung zum PubNAB und die Kritik an Ulrichs Code gerechtfertigt und Dein Suchalgorithmus durchaus korrekt. In der Praxis ist es aber so, dass in derart vielen - auch kommerziellen - Applikationen der Filename "names.nsf" hardcodiert drinsteht, dass jemand, der diese Datei anders benennt, rasch in Schwierigkeiten hineinläuft. Ausnahmsweise ist der "nicht ganz saubere Code" von Ulrich demnach unkritisch.
Jens-B. Augustiny

Beratung und Unterstützung für Notes und Domino Infrastruktur und Anwendungen

Homepage: http://www.ligonet.ch

IBM Certified Advanced Application Developer - Lotus Notes and Domino 7 und 6
IBM Certified Advanced System Administrator - Lotus Notes and Domino 7 und 6

Offline TMC

  • Freund des Hauses!
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 3.660
  • Geschlecht: Männlich
  • meden agan
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #10 am: 23.12.04 - 00:13:24 »
OK, danke für die Einschätzung, Jens.
So wie ich das interpretiere, sollte ich mit der oben zitierten Überlegung (also dem Loopen durch session.AddressBooks) also nicht falsch liegen - zumindest bei Server-Anbindung.
Wie sieht das lokal aus - da hier nun wirklich die Replik der names.nsf wohl nicht immer so heißt? Ich denke ich muss das mal testen (und vielleicht wieder den Daumen rausnehmen, der diesen Thread als erledigt kennzeichnet -- da sich der Thread nun doch noch weiterentwickelt  :D )
« Letzte Änderung: 23.12.04 - 00:15:09 von TMC »
Matthias

A good programmer is someone who looks both ways before crossing a one-way street.


Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #11 am: 23.12.04 - 00:34:29 »
Matthias, mal so ein Schnellschuss-Codeschnipsel:
Code
NABs = session.AddressBooks
	
	Forall b In NABs
		If Not b Is Nothing Then
			Call b.Open( "", "" )
			
			If b.IsOpen Then
				Set NABview = b.GetView ("($Networks)" )         'this is a view only in public addressbooks!
				If Not (NABview Is Nothing) Then                        'do not process private address books!
					Set NABview = b.GetView ("($NamesFieldLookup)")
					If Not (NABview Is Nothing) Then                      'strange - in a public NAB this view should exist, but ... don't process this case
						Set NABdoc = NABview.GetDocumentByKey (GroupName, True)
						If Not (NABDoc Is Nothing) Then                      'we found a matching document!
							If NABdoc.Type (0) = "Person" Then             'we found a person doc!
								GetNABGroupMembers = NABdoc.Owner
								Exit Function
							End If
							If NABdoc.Type (0) = "Group" Then             'we found a group!
								GetNABGroupMembers = NABdoc.Members
								Exit Function
							End If
						End If
					End If   'of "($NamesFieldLookup) don't exist"
				End If   'of "($Networks) don't exist"
			End If     
			
		End If
	End Forall


Nur ganz fix 'rauskopiert. Dem Algorithmus ist es vollkommen egal, ob das lokal oder auf dem Server läuft.

Morgen ahbe ich bestimmt wieder mehr Zeit  ;)

Bernhard

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Gegeben: Rolle -- Gesucht: wer hat alles diese Rolle
« Antwort #12 am: 23.12.04 - 00:48:16 »
Matthias, mal so ein Schnellschuss-Codeschnipsel:
Code
NABs = session.AddressBooks
	
	Forall b In NABs
		If Not b Is Nothing Then
			Call b.Open( "", "" )
			
			If b.IsOpen Then
				Set NABview = b.GetView ("($Networks)" )         'this is a view only in public addressbooks!
				If Not (NABview Is Nothing) Then                        'do not process private address books!
					Set NABview = b.GetView ("($NamesFieldLookup)")
					If Not (NABview Is Nothing) Then                      'strange - in a public NAB this view should exist, but ... don't process this case
						Set NABdoc = NABview.GetDocumentByKey (GroupName, True)
						If Not (NABDoc Is Nothing) Then                      'we found a matching document!
							If NABdoc.Type (0) = "Person" Then             'we found a person doc!
								GetNABGroupMembers = NABdoc.Owner
								Exit Function
							End If
							If NABdoc.Type (0) = "Group" Then             'we found a group!
								GetNABGroupMembers = NABdoc.Members
								Exit Function
							End If
						End If
					End If   'of "($NamesFieldLookup) don't exist"
				End If   'of "($Networks) don't exist"
			End If     
			
		End If
	End Forall


Nur ganz fix 'rauskopiert. Dem Algorithmus ist es vollkommen egal, ob das lokal oder auf dem Server läuft.

Morgen habe ich bestimmt wieder mehr Zeit  ;)

Bernhard

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz