Et voilà:
Function userEditRights(doc As NotesDocument) As Boolean
Forall item In doc.Items
If item.IsAuthors=True Then
userlookup=Evaluate(|@contains(@usernameslist;@explode("|+item.text+|";"; "))|)
If userlookup(0)=1 Then userEditRights=True
End If
End Forall
End Function
Ganz nackich noch die Funktion, ohne Errorhandling und Behandlung übergeordneter Benutzerrechte (Editor, Manager...) - aber funktioniert.
Danke für den Hinweis mit dem @usernames - da wär ich bei meiner LS-Fixierung wieder nicht draufgekommen :-)
OK, also so (inkl. der Prüfung, ob weitergehende Rechte vorliegen):
Function userEditRights(doc As NotesDocument) As Boolean
Dim session As New NotesSession
Dim db As NotesDatabase
Dim level As Integer
Dim userlookup As Variant
userEditRights=False
'Prüfung auf Editor-, Designer-, Managerrechte...
Set db = session.CurrentDatabase
level = db.QueryAccess(session.UserName )
If level>3 Then
userEditRights=True
Exit Function
End If
'Prüfung auf Autorenrechte...
Forall item In doc.Items
If item.IsAuthors=True Then
userlookup=Evaluate(|@contains(@usernameslist;@explode("|+item.text+|";"; "))|)
If userlookup(0)=1 Then
userEditRights=True
Exit Function
End If
End If
End Forall
End Function
Hat das eine besondere Bewandnis damit, dass Du das userlookup mittels ABS umwandelst? Erscheint mir auf den ersten Blick nicht notwendig...
Hm. Also ok, durchaus möglich, dass das dadurch übersichtlicher wird für den einen oder anderen... ;)
Noch ne Ergänzung am Schluss, für Dokumente, die überhaupt keine definierten Autorenfelder besitzen:
Function userEditRights(doc As NotesDocument) As Boolean
Dim session As New NotesSession
Dim db As NotesDatabase
Dim userlookup As Variant
userEditRights=False
'Prüfung auf Editor-, Designer-, Managerrechte...
Set db = session.CurrentDatabase
level% = db.QueryAccess(session.UserName )
If level%>3 Then
userEditRights=True
Exit Function
End If
'Prüfung der Autorenfelder auf Autorenrechte...
Forall item In doc.Items
If item.IsAuthors=True Then
userlookup=Evaluate(|@contains(@usernameslist;@explode("|+item.text+|";"; "))|)
If userlookup(0)=1 Then
userEditRights=True
Exit Function
End If
End If
End Forall
'Prüfung auf Autorenrechte, falls keine Autorenfelder vorhanden sind...
userlookup=Evaluate(|@contains(@usernameslist;@author)|)
If userlookup(0)=1 Then
userEditRights=True
End If
End Function
Da leistet die @author-Formelfunktion gute Dienste...
Welche Fehlerroutine(n) würden wir denn benötigen?
Nun gut Norbert :) Inklusive Prüfung, ob es sich um ein öffentliches Dokument handelt und IsCurrentAccessPublicWriter-Abfrage:
Function userEditRights(doc As NotesDocument) As Boolean
Dim session As New NotesSession
Dim db As NotesDatabase
Dim userlookup As Variant
userEditRights=False
Set db = session.CurrentDatabase
level% = db.QueryAccess(session.UserName )
If level%>3 Then
userEditRights=True
Exit Function
End If
i=0
Forall item In doc.Items
If item.IsAuthors=True Then
i=1
userlookup=Evaluate(|@contains(@usernameslist;@explode("|+item.text+|";"; "))|)
If userlookup(0)=1 Then
userEditRights=True
Exit Function
End If
End If
End Forall
If i=0 Then
userlookup=Evaluate(|@contains(@usernameslist;@author)|)
If userlookup(0)=1 Then
userEditRights=True
End If
If doc.~$PublicAccess="1" Then
If Not db.IsCurrentAccessPublicWriter Then
userEditRights=False
Else
userEditRights=True
End If
End If
End If
End Function