Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: Hedwig14 am 24.08.07 - 12:20:41

Titel: ACL mit LS auslesen
Beitrag von: Hedwig14 am 24.08.07 - 12:20:41
Hallo zusammen,

ich versuche gerade per LS alle DB-ACL auf dem Server nach einer bestimmten Gruppe abzufragen.
Möchte wissen, ob diese Gruppe in der ACL vorhanden ist. Auf den Catalog kann ich mich leider nicht 100%tig verlassen. Bekomme aber immer den Fehler

Fehler #4063 — Database Server!!admin4.nsf has not been opened yet

Wie kann ich das umgehen ?

#########################################


Dim s As New NotesSession   
   On Error Goto errHandler
   
   Dim dbdir As New NotesDbDirectory("hier ist der Server")
   Dim db As NotesDatabase
   Set db = dbdir.GetFirstDatabase(DATABASE)
   
   While Not (db Is Nothing)
      
'ACL auslesen
      Dim protokoll As New NotesLog("GruppenCheck : ")
      protokolldatei="d:\temp\GruppenCheck.txt"
      Call protokoll.OpenFileLog(protokolldatei)
      
      Dim acl As NotesACL
      Dim entry As NotesACLEntry
      Set acl = db.ACL
      Set entry = acl.GetEntry( "#MA-HO" )
      If Not ( entry Is Nothing ) Then
         Call protokoll.LogAction(db.Title)
         Call protokoll.LogAction(entry.Level)
         Call protokoll.LogAction("##############################")
      End If
weiter:
      Call protokoll.close
      Set db = dbdir.GetNextDatabase
   Wend
   
   'vorbereitung der  Mail
   Set mdoc = New NotesDocument(db)   
   mdoc.Form = "Memo"   
   mdoc.Subject = "Agent ACL Check"
   
   Dim object As NotesEmbeddedObject
   Dim rtitem As NotesRichTextItem
   Set rtitem = New NotesRichTextItem( mdoc, "Body" )
   
   Call rtitem.AppendText (" Hallo, anbei der aktuelle Auswertung : ")
   Call rtitem.AddNewline (4)   
   
   Set object = rtitem.EmbedObject ( EMBED_ATTACHMENT, "", protokolldatei)
   
   Call mdoc.Send( True, "xy")
   
   
errHandler:
   Call protokoll.LogAction("Fehler #" & Err & " — " & Error$ & " (Zeile: " & Erl & ")")
   Call protokoll.close
   Resume  weiter
Titel: Re: ACL mit LS auslesen
Beitrag von: MadMetzger am 24.08.07 - 12:28:46
Warum kannst du dich auf den Katalog nicht verlassen? Weil nicht alle Datenbanken gezeigt werden? Wenn es der Grund ist, dann kann man die Ansichten so anpassen, dass alle Datenbanken angezeigt werden. Enthalten sind nämlich immer alle Datenbanken, es werden nur die ausgeblendet, die einen bestimmten Haken in den DB-Eigenschaften gesetzt haben. Wenn es das ist, bemüh mal die Forumssuche, dann findest du hierfür eine Lösung...
Titel: Re: ACL mit LS auslesen
Beitrag von: koehlerbv am 24.08.07 - 12:29:41
Ändere folgende Zeile:
Dim db as NotesDatabase
in
Dim db as New NotesDatabase ("", "")

Bernhard
Titel: Re: ACL mit LS auslesen
Beitrag von: Hedwig14 am 24.08.07 - 13:39:22


@Mad:
Im zweiten Schritt wollte ich bei den DB´s in denen die ACL gesetzt wurde eine
weitere Gruppe hinzufügen. Anspnsten hats Du Recht mit der Ansicht, gute Idee.

@Bernhard: Die Änderung hat leider keine Besserung gebracht !

Darf die die ACL im laufenden Betrieb nich abfragen ??? Kann ich mir nicht vorstellen !!
Titel: Re: ACL mit LS auslesen
Beitrag von: m3 am 24.08.07 - 13:49:46
Code
Set db = dbdir.GetFirstDatabase(DATABASE)
Call db.Open( "", "" )
Titel: Re: ACL mit LS auslesen
Beitrag von: Tode am 24.08.07 - 13:55:53
ein open geht aber nur, wenn derjenige, der die Datenbank versucht zu öffnen, auch wirklich die Berechtigung hat, auf die DB zuzugreifen. Und da liegt in meinen Augen der Hase im Pfeffer.

Also entweder muss man den Agenten mit dem Server laufen lassen (Run on behalf oder per signieren), oder man muss dafür sorgen, dass der User, der den Agent ausführt Rechte auf ALLE Datenbanken auf dem Server hat (was in den meisten Fällen problematisch werden dürfte).

Trotz allem stellt sich auch mir die Frage, weshalb man dem catalog wohl nicht vertrauen kann ?
Die Ansicht ist ja schnell umgestellt, so dass sie ALLES anzeigt (unabhängig vom Flag in den Datenbank- Eigenschaften)...

Gruß
Tode
Titel: Re: ACL mit LS auslesen
Beitrag von: m3 am 24.08.07 - 13:57:02
ein open geht aber nur, wenn derjenige, der die Datenbank versucht zu öffnen, auch wirklich die Berechtigung hat, auf die DB zuzugreifen. Und da liegt in meinen Augen der Hase im Pfeffer.
Er bekommt aber den Fehler
Code
Fehler #4063 — Database Server!!admin4.nsf has not been opened yet
und nicht irgend einen Zugriffsfehler.
Titel: Re: ACL mit LS auslesen
Beitrag von: koehlerbv am 24.08.07 - 13:59:05
Ganz reicht das noch nicht:
Set db = dbdir.GetFirstDatabase (DATABASE)
   While Not db Is Nothing
      Call db.Open (db.Server, db.FilePath)

Wichtig ist die Abfrage, ob das NotesDatabase-Object überhaupt instantiiert werden konnte: Falls der Signer des Codes da keinen Zugriff hat, wird ein Fehler geworfen und die Routine beendet.

Bernhard

PS: Selbstverstädnlich kann man auch Datenbanken, die im Zugriff sind, ACL-mässig auslesen und verändern!
Titel: Re: ACL mit LS auslesen
Beitrag von: Tode am 24.08.07 - 14:05:35
du hast natürlich recht @m3... Dein "open" hilft bei der ersten Fehlermeldung natürlich, aber als nächstes wäre sie über die fehlenden Berechtigungen gestolpert. Deshalb dachte ich, dass ich das gleich mit erwähne...

Ach ja: Die Meldung "Has not been Opened yet" kann auch kommen, wenn man ein "Open" probiert, und das aufgrund fehlender Berechtigungen nicht darf...

Mal ganz abgesehen davon ist das "Errorhandling" (obwohl schon mal ein Fortschritt ist, dass überhaupt eins betrieben wird) ja nicht wirklich... prickeln...

Gruß
Titel: Re: ACL mit LS auslesen
Beitrag von: Hedwig14 am 24.08.07 - 14:09:42
db.open hat mir schonmal weitergeholfen
Ich habe die Rechte als Admin ! Und das ganze iste ine einmalige Sache um eine bestimmte Gruppe
hinzuzufügen !

Vielen dank für eure Info !
Titel: Re: ACL mit LS auslesen
Beitrag von: Driri am 24.08.07 - 14:28:46
Ich bin ja eher der Admin-Laie, aber warum markierst Du Dir im Adminclient nicht einfach die Datenbanken und fügst die Gruppe über das Kontextmenü "Zugriffskontrolliste" -> "Verwalten" hinzu ?
Titel: Re: ACL mit LS auslesen
Beitrag von: umi am 24.08.07 - 16:11:17
Evtl. vorher mal prüfen, ob die DB  überhaupt offen ist....
if db.isopen ????