Das Notes Forum
Domino 9 und frühere Versionen => ND7: Entwicklung => Thema gestartet von: margli am 05.08.08 - 12:45:57
-
Hallo liebe Forum Mitglieder,
ich habe ein kleines Berechtigungsproblem. Wir haben eine Art Dokumentations Datenbank (MS Office Bibliothek). Hier habe ich eine Ansicht angelegt. Dokumente, die dort gespeichert werden sollen, dürfen nur eine bestimmte Gruppe sehen. Auf diese Datenbank haben alle Zugriff. Ich habe jetzt eine Extra Gruppe angelegt.
Wenn ich ein Dokument einstelle, dann ist es erstmal für jeden sichtbar. Gehe ich über den Reiter "Sicherheit" -> "Wer kann dieses Dokument lesen" --> Häckchen raus bei "Alle Leser und höhere" und füge dann nur die Gruppe hinzu, dann funktioniert alles. Nun versuche ich diese manuelle "Maßnahme" zu automatisieren. Im Queryclose habe ich dazu folgendes eingefügt...
Sub Queryclose(Source As Notesuidocument, Continue As Variant)
Dim W As New NotesUIWorkspace
Dim doc As notesdocument
Dim item As NotesItem
Set Source = W.CurrentDocument
Call source.Refresh
If (Source.FieldGetText ("Categories") = "ABC") Then
Set doc = source.document
Call doc.ReplaceItemValue("$Readers", "ABC-Gruppe")
Set item = doc.GetFirstItem("$Readers")
If item.IsReaders = False Then item.IsReaders = True
Call doc.ReplaceItemValue("DocumentReaders", "ABC-Gruppe")
Call doc.Save(True, True)
End If
End Sub
Nach dem Abspeichern ist das $Readers Feld auch richtig mit dem Wert ABC-Gruppe gesetzt. Leider können aber die User, die in der Gruppe sind, das Dokument nicht sehen. Ich weiß nicht wo mein Denkfehler ist.
Würde mich über Tipps freuen.
Vielen Dank im Voraus.
Martin
-
Hi,
hast Du schonmal versucht, das Feld über die NotesItem-Klasse (z.B. mittels Set LeserFeld = New NotesItem("$Readers","ABC", READERS)) anzulegen (das vorhandene bei Bedarf natürlich erst rausschmeißen) ?
Evtl. könnte auch ein anderer Feldname was bringen - $Readers is ja bekanntlich "reserviert"...
-
Ich würde auch auf den reservierten Namen tippen. Nenn das Item von mir aus "DieWollMerNeilasse" or whatever, aber nicht $Readers, was aus den Maskenproperties kommt. Oder nimm gleich das "DocumentReaders", was Du ja schon eingeführt hast.
Bernhard
-
Hallo,
OK Danke für den Hinweis. Ich werde es testen. Ich bin bloß auf die Idee mit dem $Readers Feld gekommen, da dieses Feld auftaucht und mit dem Wert der Gruppe gefüllt ist, wenn ich über den Reiter "Sicherheit" -> "Wer kann dieses Dokument lesen" --> Häckchen bei "Alle Leser und höhere" raus nehme und dann die entsprechende Gruppe hinzufüge. Da dachte ich, wenn ich das automatisch setze, dann funktioniert das auch so. :)
Martin
-
Hallo,
ich glaube ja eher, daß das mit deinem wilden Konstrukt im QueryClose zusammenhängt. Dir wird ein blitzsauberes NOTESUIDOCUMENT als Source übergeben, aber du bestimmst es neu aus dem CurrentDocument des Workspaces - und machst dann ein REFRESH. Wenn sich dabei noch einmal ein Feldinhalt ändert, werden Maskeneigenschaften ein zweites Mal über dein Dokument gejagt, das du im Backend schon mit einem $Readers-Feld versehen hast. Das Call doc.Save(True,True) müßte eigentlich für eine ganze Kaskade von Replikationskonflikten sorgen. Vermutlich verhindert nur die Grundeinstellung "Replizierkonflikte mischen" das - aber dabei fliegt dir das $READERS-Feld wieder raus bzw. behält nicht die Eigenschaft bei, daß es ein Leserfeld ist.
Aber ich schließe mich auch allen anderen an: ich würde das Systemfeld nicht benutzen, sondern einen anderen Feldnamen wählen.
Gruß
Norbert
-
Hallo Nobert,
damit hast Du wahrscheinlich recht. Ich habe jetzt einfach mal nicht das Systemfeld benutzt, sondern ein anderes Feld. Auch dann kann der Benutzer der Gruppe das Dokument nicht sehen. Ich werde es mal versuchen umzubauen.
Martin