Domino 9 und frühere Versionen > ND7: Entwicklung
Edit-Rechte auf Dokument per LS überprüfen
jo@chim:
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:
--- Code: ---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
--- Ende Code ---
Da leistet die @author-Formelfunktion gute Dienste...
Welche Fehlerroutine(n) würden wir denn benötigen?
jo@chim:
Nachtrag - es wird natürlich eine Prüfung benötigt, ob Autorenfelder vorhanden sind, sonst wird @author in jedem Falle herangezogen. Also hier korrigiert:
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...
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
'Prüfung auf Autorenrechte, falls keine Autorenfelder vorhanden sind...
if i%=0 then
userlookup=Evaluate(|@contains(@usernameslist;@author)|)
If userlookup(0)=1 Then
userEditRights=True
End If
end if
End Function
LN4ever:
Jetzt fehlt nur noch die Prüfung, ob es sich um ein öffentliches Dokument handelt und der Benutzer laut ACL öffentliche Dokumente schreiben darf.
Gruß
Norbert
jo@chim:
Nun gut Norbert :) Inklusive Prüfung, ob es sich um ein öffentliches Dokument handelt und IsCurrentAccessPublicWriter-Abfrage:
--- Code: ---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
--- Ende Code ---
jo@chim:
Ähem, P.S.: und wer jetzt kommt und sagt "die PublicAccess-Prüfung könnte man schon zu Beginn setzen, dann würden 0,01333ms eingespart", dem antworte ich "du hast Recht Bernd" ;D
Navigation
[0] Themen-Index
[*] Vorherige Sete
Zur normalen Ansicht wechseln