Domino 9 und frühere Versionen > ND6: Entwicklung
ACL manipulieren
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