Domino 9 und frühere Versionen > ND7: Entwicklung

Wie kann ich aktuellen Rechte auf ein Dokument feststellen

<< < (4/5) > >>

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