Domino 9 und frühere Versionen > ND6: Entwicklung

ACL manipulieren

<< < (2/2)

koehlerbv:
Hallo Axel,

dass mit den Nicht-Strings, sondern Arrays ist auf jeden Fall ein Fehler. Es müsste auf das erste Element des Arrays zurückgegriffen werden, es ginge also auch
Call db.GrantAccess( doc.GetItemValue("Pruefer_Name") (0),  ACLLEVEL_EDITOR).

A-Bär: Dahin kommt man ja erst gar nicht ... Der Agent startet gar nicht lt. Fehlermeldung.

Wie wird denn der Agent aufgerufen? Ich nehme an mit Agent.Run oder Agent.RunOnServer. Und dann wird wohl der falsche Agenttyp ausgewählt worden sein, denn hierfür eignen sich nur normalerweise vom Server getriggerte Agents (periodisch, so auch "Periodisch - Nie", jedoch keine Agents, die "Aus der Liste der Agenten" oder "Als Aktion" gestartet werden).

HTH,
Bernhard

knoedel0815:
hallo helge,
nur mal so aus systemsicht: eine acl lässt sich nicht beliebig aufblähen. bei ca. 950 einträgen ist sense. ich hoffe, dass du das berücksichtigt hast...

grüsse!

koehlerbv:
Dem Knoedel stimme ich hier vollkommen zu, ich wagte das aber bisher nicht zu thematisieren: Der Berechtigungsansatz ist meines Erachtens nach hinterfragungswürdig. Zu Euren Plänen solltest Du Dich ggf. detaillierter äussern, denn bestimmt gibt es hier auch einen vollkommen anderen Ansatz.
Die Lösung Deines aktuellen Problems sollten wir aber ggf. noch abwarten, da dieses aus anderer Sicht für andere Forums-Mitglieder mal von Interesse sein könnte.

Bernhard

Helge Jantzen:
Hallo,

erstmal danke für die zahlreichen Antworten.

@koehlerbv: Der Agent wird mit Agent.RunOnServer gestartet und ich hatte ihn auf "Aus der Liste der Agenten". Ich hab das jetzt umgestellt auf "periodisch - nie". Die anderen Änderunge hab ich auch eingearbeitet und die ganze Sache läuft perfekt. Hier nochmal der Code des Agenten zur Info:

Sub Initialize
   Dim s As New NotesSession
   Dim db As NotesDatabase
   Dim ag As Notesagent
   Dim doc As NotesDocument
   Dim acl As NotesACL
   Dim entry As NotesACLEntry
   
   Set db = s.CurrentDatabase
   Set ag = s.CurrentAgent
   Set doc = db.GetDocumentByID(ag.ParameterDocID)
   Set acl = db.ACL
   Set entry = acl.GetEntry( doc.GetItemValue("Pruefer_Name")(0))
   
   If (entry Is Nothing) Then
      Call db.GrantAccess( doc.GetItemValue("Pruefer_Name") (0),  ACLLEVEL_EDITOR)
      Set entry = acl.GetEntry( doc.GetItemValue("Pruefer_Name")(0))
   End If
   Call entry.DisableRole("QMB")
   Call entry.DisableRole("QUM-Koordinator")
   Call entry.DisableRole("QM-Bearbeiter")
   If Not (entry Is Nothing) Then
      entry.UserType = ACLTYPE_PERSON
      Call entry.EnableRole( doc.GetItemValue("Pruefer_Typ")(0))
      If (doc.GetItemValue("Pruefer_Typ")(0) = "QMB") Or (entry.Level = ACLLEVEL_MANAGER) Then
         entry.CanDeleteDocuments = True
      Else
         entry.CanDeleteDocuments = False
      End If
      Call acl.Save()
   End If
End Sub

@knoedel0815: Es werden ca. 20 - 25 Einträge, von daher sollte das doch eigentlich kein Problem geben.

Die ganze Berechtigungsgeschichte ist natürlich zu hinterfragen und ist sicher nur ein Ansatz von vielen. Auch hab ich hier das Problem, "Was tun wen ich einen Eintrag löschen will?".  Wobei ich das auch bei den anderen Ansätzen sehe, es sei denn ich baue die Zugriffslisten im Adressbuch periodisch wieder auf oder der entsprechende Agent wird PostDocumentDelete gestartet. Damit wiederum hab ich so gar keine Erfahrung und vor keinen Ansatz wie ich an die Dokumente komme. Bestimmt über ne DocumentCollection, oder? Wie auch immer, wenn ich die Listen neu aufbaue kann ich das genauso gut mit der ACL machen. Mein Ansatz da ist im Moment, dass ich die ACL durchgehe, schaue ob ein entsprechendes Dokument vorhanden ist (oder es eine Servergruppe ist) und den Eintrag gegebenen Falls lösche. Ich kann auch erstmal alle Einträge der ACL (bis auf die Server) löschen und dann die Ansicht durchgehen und entsprechend neue Einträge anlegen.
Soweit meine Überlegungen zu dem Thema. Ich denke beide Ansätze (ACL und Adressbuchlisten) unterscheiden sich im Aufwand kaum voneinander. Bei der ACL-Geschichte muß ich nur die eine DB anpacken, aber diesen Vorteil, wenn es denn überhaupt einer ist, kann man wohl vernachlässigen. Ich muß auchzugeben, dass mich das Ganze irgendwie reitzt und ich das einfach mal gemacht haben möchte.
Ok, ich gespannt auf eure Kommentare.

Gruß,
Helge

Navigation

[0] Themen-Index

[*] Vorherige Sete

Zur normalen Ansicht wechseln