Autor Thema: Edit-Rechte auf Dokument per LS überprüfen  (Gelesen 5786 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