Domino 9 und frühere Versionen > ND7: Entwicklung

Edit-Rechte auf Dokument per LS überprüfen

<< < (4/4)

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