Autor Thema: Edit-Rechte auf Dokument per LS überprüfen  (Gelesen 5932 mal)

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Edit-Rechte auf Dokument per LS überprüfen
« am: 21.02.08 - 14:07:35 »
Ich möchte per Lotus Script die Bearbeitungrechte auf ein Backup-Dokument überprüfen.

Das könnte ich natürlich über einen Vergleich der verschiedenen Autorenfelder mit dem aktuellen Benutzer und seinen Roles (was sich aber recht aufwändig gestalten würde) oder per workspace.editdocument - ich will das Dokument aber überhaupt nicht öffnen, sondern lediglich die Rechte prüfen und dann ein Antwortdokument zuordnen, falls diese ausreichend sind.

Etwas in der Art
Code
if doc.IsEditable = true
wäre also bärfäggd für mich.

Any hints?
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

klaussal

  • Gast
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #1 am: 21.02.08 - 14:15:41 »
Du möchtest vielleicht @useraccess lesen ?

Und evtl. @userroles.
« Letzte Änderung: 21.02.08 - 14:23:03 von klauss »

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #2 am: 21.02.08 - 14:29:31 »
schau Dir mal QueryAccess, QueryAccessPrivileges und QueryAccessRoles in der Klasse NotesDatabase an.
Gruß
Dirk

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #3 am: 21.02.08 - 14:36:44 »
Danke an Euch beide für die schnelle Re... aber mir gehts nicht um die Benutzerrechte auf die DB allgemein - das ist soweit schon klar - sondern um eine schnelle Möglichkeit, zu überprüfen, ob ein gegebener Benutzer auf ein gegebenes NotesDocument Edit-Rechte hat, ohne das Dokument im Frontend zu öffnen...
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline diali

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 1.023
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #4 am: 21.02.08 - 14:39:20 »
über die DB-Rechte und den Inhalten in den Autorenfeldern hast Du was Du brauchst.
Gruß
Dirk

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #5 am: 21.02.08 - 14:40:48 »
Dafür gibt es in der Tat keine Property (was ja schön wäre ...).

Vorschlag: Bilde eine Liste Deiner Autorenfelder
Autoren := Autoren1 : Autoren2 usw.

Vergleiche diese dann mit mit @UserNamesList:
Autoren *= @UserNamesList

Das ganze natürlich via der Evaluate-Function von LS.

HTH,
Bernhard

botschi

  • Gast
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #6 am: 21.02.08 - 14:42:10 »
Eine Liste aller Rollen, Gruppen, User erstellen, die in den Autorenfeldern des entsprechenden Doks sind und dann z.B. mit Evaluate und @isMember oder @contains einen entsprechenden Rückgabewert bekommen.

Zu spät...  O0

Matthias

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #7 am: 21.02.08 - 15:09:18 »
Dafür gibt es in der Tat keine Property (was ja schön wäre ...)
Das hatte ich befürchtet  ::)

Das ganze natürlich via der Evaluate-Function von LS.

An dem "natürlich" bin ich natürlich wieder hängengeblieben...  aber nach 8 Jahren LN hab ichs inzwischen auch begriffen, dass da manches schneller mit geht  :)

Mal sehn, vielleicht finde ich die Zeit, gelegentlich eine ordentliche LS-Funktion in der Art UserEditRight(doc) as boolean zu programmieren:

Über die Ermittlung aller User-Rollen und einen Schleifendurchlauf durch die Autorenfelder des Dokuments müsste das ja mit vertretbarem Aufwand zu realiseren sein...

thX@all
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #8 am: 21.02.08 - 15:18:20 »
Solch ein Verfahren wäre aber um einiges inperformanter als ein

Autoren1 : Autoren2 : Autoren3 *= @UserNamesList.

Bernhard

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #9 am: 21.02.08 - 15:58:35 »
Sicher richtig. Aber wenn ich eine Funktion schreibe, will ich doch, dass sie für alle Arten von Dokumenten brauchbar ist, nicht nur für eine festgelegte Anzahl Autorenfelder mit festgelegten Bezeichnungen...
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #10 am: 21.02.08 - 16:04:20 »
Auch wahr  ;)

Dann kannst Du die Verfahren kombinieren: Die Autorenfelder ermitteln und dann mit Evaluate und *= @UserNamesList verarbeiten.

Bernhard

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #11 am: 21.02.08 - 16:40:32 »
Et voilà:

Code
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 :-)
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #12 am: 21.02.08 - 16:55:14 »
Feine Rückmeldung. Danke, Achim.

Drei Vorschläge:
- Option Declare einschalten und Dim userlookup As Variant
- Ordnung und Sauberkeit im Schlachthof: Der Code beginnt (nach dem Deklarationen) mit userEditRights = False
- Kleiner Performance-Kicker:
If Abs (userlookup(0)) = True Then
    userEditRights = True
    Exit Function     'What the hell we should check without any sense more items ...
End If

Bernhard

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #13 am: 22.02.08 - 10:16:48 »
OK, also so (inkl. der Prüfung, ob weitergehende Rechte vorliegen):

Code
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...
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline koehlerbv

  • Moderator
  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 20.460
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #14 am: 22.02.08 - 10:18:51 »
Hat das eine besondere Bewandnis damit, dass Du das userlookup mittels ABS umwandelst? Erscheint mir auf den ersten Blick nicht notwendig...

Ja - dann kann ich mit True arbeiten. Liest sich besser und ist damit wartungsfreundlicher.

Bernhard

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #15 am: 22.02.08 - 14:19:28 »
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

Da leistet die @author-Formelfunktion gute Dienste...

Welche Fehlerroutine(n) würden wir denn benötigen?
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #16 am: 25.02.08 - 09:51:06 »
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
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline LN4ever

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 505
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #17 am: 25.02.08 - 20:46:56 »
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
Situs vilate in isse tabernit.

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #18 am: 26.02.08 - 09:51:55 »
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
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

Offline jo@chim

  • Aktives Mitglied
  • ***
  • Beiträge: 246
  • Geschlecht: Männlich
Re: Edit-Rechte auf Dokument per LS überprüfen
« Antwort #19 am: 26.02.08 - 09:57:19 »
Ä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
Gruss,
Achim
-------------------
IBM Certified Advanced Application Developer Lotus Notes and Domino 7

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz