Domino 9 und frühere Versionen > ND7: Entwicklung
Wie kann ich aktuellen Rechte auf ein Dokument feststellen
koehlerbv:
Peter, ein Eingriff in QueryModeChange reicht da aber in keiner Weise aus.
Bernd:
Du kannst auch - solange es um die Dokument-Rechte des aktuellen Nutzers geht - auch die Inhalte der Authors-Items auslesen und vergleichen mit einem Evaluate ("@UserNamesList"). Wenn Du dabei einen Treffer erzielst, dann passen die Autorenrechte.
Und @UsernamesList löst auch nested groups auf.
HTH,
Bernhard
Peter Klett:
--- Zitat von: koehlerbv am 13.04.11 - 16:52:20 ---Peter, ein Eingriff in QueryModeChange reicht da aber in keiner Weise aus.
--- Ende Zitat ---
Nö, aber wenn da nichts drin ist, wird es wohl keine eigene Steuerung geben.
koehlerbv:
Jo, das ist wohl war, denn da muss *auch* was drin sein (wenn man nicht das offensichtlichste Loch haben will) ;)
Bernhard
Hatschi:
Hallo Bernhard,
Dank euren Hinweisen mit @usernameslist bin ich nun zu folgendem Scriptcode gekommen:
Function AutorenRechte (doc ) As Boolean
'Diese Funktion liefert true zurück, wenn der Anwender Autorenrechte hat
'Array mit den Feldnamen vom Typ Authors, ist zwar nicht nötig, aber eine Hilfe beim debuggen
Dim AutorenFeldNamen () As String
'Array mit den Inhalten der Autorenfelder
Dim Autoren
Dim UserNameslist As Variant
Dim gefunden As Variant
Redim AutorenFeldNamen (0)
Redim Autoren (0)
'Rückgabewert der Funktion auf False setzen
AutorenRechte=False
'Alle Items nach Autorenfelder durchsuchen
Forall feld In doc.items
If feld.isAuthors Then
'es wurde ein Autorenfeld gefunden
'den Feldnamen im Array merken
AutorenFeldNamen ( Ubound (AutorenFeldNamen)) = feld.name
Redim Preserve AutorenFeldNamen ( Ubound (AutorenFeldNamen) +1)
'den Inhalt im Array merken
Autoren = Arrayappend(Autoren, feld.values)
End If
End Forall
'Die aktuellen Userdaten holen
UserNameslist = Evaluate("@usernameslist")
'Weil ein leeres Element des Array zuviel erzeugt wird, hier den Eintrag entfernen
Redim Preserve AutorenFeldNamen ( Ubound (AutorenFeldNamen) -1)
'Prüfen ob ein Eintrag aus der Usernamelist in den Autoren zu finden ist
Forall test In UserNameslist
gefunden=Arraygetindex (Autoren, test, 5 )
If gefunden > 0 Then
'es wurde ein Eintrag gefunden der die Autorenrechte belegt,
AutorenRechte=True
Exit Forall
End If
End Forall
End Function
Bernd
marschul:
2 Anmerkungen:
Bei dem Array AutorenFeldNamen läufst du Gefahr, auf einen Fehler zu laufen, nämlich dann, wenn keine Autorenfelder vorhanden sind. Dann ist ubound = 0 und mit dem letzten Redim versuchst Du, es auf -1 zu setzen.
Besser wäre:
statt
--- Zitat ---AutorenFeldNamen ( Ubound (AutorenFeldNamen)) = feld.name
Redim Preserve AutorenFeldNamen ( Ubound (AutorenFeldNamen) +1)
--- Ende Zitat ---
--- Code: ---If AutorenFeldNamen(0) = "" Then
AutorenFeldNamen(0) = feld.name
Else
Redim Preserve AutorenFeldNamen(Ubound(AutorenFeldNamen) + 1)
AutorenFeldNamen(Ubound(AutorenFeldNamen)) = feld.name
End If
--- Ende Code ---
Damit kann das spätere Redim um -1 weg.
Allerdings verwendest Du dieses Array anschließend gar nicht mehr, weshalb das alles überflüssig sein dürfte ;)
Bezüglich des verwendeten Arrays Autoren würde ich schreiben
--- Code: ---Autoren = Fulltrim(ArrayUnique(ArrayAppend(Autoren, feld.values)))
--- Ende Code ---
Das verhindert, dass leere Werte bzw. Werte mehrfach auftauchen.
Die Abfrage bezüglich 'gefunden' dürfte auch scheitern, wenn nicht gefunden, dann ist das Ergebnis nämlich nicht 0 sondern Null, also statt
--- Zitat ---If gefunden > 0...
--- Ende Zitat ---
--- Code: ---If Not IsNull(gefunden) Then...
--- Ende Code ---
Navigation
[0] Themen-Index
[#] Nächste Seite
[*] Vorherige Sete
Zur normalen Ansicht wechseln