Das Notes Forum

Domino 9 und frühere Versionen => ND6: Entwicklung => Thema gestartet von: judicious am 20.02.06 - 09:14:19

Titel: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 09:14:19
Guten Morgen,

Ich habe ein Problem mit den Zugriffsberechtigungen bei meinen Dokumenten.
Als erstes möchte ich den Edit Button hidden wenn diese Formel zutrifft:
!@If(@UserName=From) | @IsNotMember("[creator]"; @UserRoles)

Jedoch sehe ich jetzt gar keinen Button mehr obwohl ich in der [creator] Role bin.

Dann eine andere Frage, gibt es eine Möglichkeit einem Dokument von Anfang an eine Userrole mit zu geben als Author? Also das der Author selber und alle User in der Role [creator] das Dokument bearbeiten können?

Dann noch eine Frage bei der ich absolut kein Plan habe, Lotus Script:
Ich habe dank der Forumsuche zwar heraus gefunden wie ich den Doppelklick --> Edit Mode verhindern kann, nicht wie ich ihn aber für die berechtigten User zulassen kann?
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 09:22:47
Ändere deine HideWhen - Formel mal so ab:

!@If(@UserName=From) & @IsNotMember("[creator]"; @UserRoles)

Füge in der Maske ein Autorenfeld (berechnet oder berechnet beim Anlegen und lasse Mehrfachwerte zu) ein und fülle es mit

    @Username : [creator]


Axel
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 09:34:00
!@If(@UserName=From) & @IsNotMember("[creator]"; @UserRoles)

Wieso und? Also das geht auch nicht. Ich will ja das der Author und jeder der die Role [creator] hat bearbeiten kann.

ähm und wo gehört das hin: @Username : [creator]??? Ganz normal ins Value Feld oder? Dort kommt aber der Fehler: Unknown [KeyWord] for @Function: '[Creator]'
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: klaussal am 20.02.06 - 09:40:51
Muss wohl: @Username : "[creator]" heissen.

Das | war schon richtig. Nur sagt die Kristalkugel nicht, was in "From" drinne steht....
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 09:45:09
Im "From" steht jetzt: @UserName : "[creator]"
und jetzt will ich den Edit Button vor allen Usern verstecken die nicht in der Role [creator] sind und auch nicht der Author sind.
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 09:46:50
ähm und wo gehört das hin: @Username : [creator]??? Ganz normal ins Value Feld oder? Dort kommt aber der Fehler: Unknown [KeyWord] for @Function: '[Creator]'

Sorry!  Da gingen wohl die Gänsebeine verloren.

Das | war schon richtig. Nur sagt die Kristalkugel nicht, was in "From" drinne steht....

Da bin ich mit nicht ganz so sicher. Die Logik ist hier nicht ganz so einfach zu durchschauen, besonders wenn mit Negierungen gearbeitet wird.

Der Button soll sichtbar sein wenn der User nicht im Feld Form enthalten ist und nicht die Rolle Creator hat.

Axel
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 09:49:28
Der Button soll sichtbar sein wenn der User nicht im Feld From enthalten ist und nicht die Rolle Creator hat.

Ganz genau
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 09:51:46
... und wie steht der Name im Feld From drin?


Axel
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: koehlerbv am 20.02.06 - 09:56:07
Wird das ganze eventuell lokal getestet, und die Datenbank hat keine konsistente ACL?

Ab gesehen davon geht es hier nicht um Berechtigungen, sondern nur um das Verbergen eines Buttons. Das ist kein ernsthafter Schutz vor unberechtigtem Editieren von Dokumenten. Hierfür sind Autorenfelder einzusetzen, was zudem zu einer erheblichen Erleichterung der Codierung beiträgt.

Bernhard
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 10:00:15
... und wie steht der Name im Feld From drin?


Axel

Vorname Nachname/Devision/Firma    

Ja es wird lokal getestet, da der Testserver offline ist, wegen ein paar Updates von Datenbanken.
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: umi am 20.02.06 - 10:03:35
für was das @if am Anfang?
Ausserdem ist:
!@If(@UserName=From) & @IsNotMember("[creator]"; @UserRoles)
keine gültige Formel !

Dein Hidewhen könntest Do schreiben!

!(@UserName=From | @IsMember("[creator]"; @UserRoles))
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 10:05:58
Ja es wird lokal getestet, da der Testserver offline ist, wegen ein paar Updates von Datenbanken.

Bernhard hat ja bereits darauf hingewiesen.

Hat die DB ein konsistente ACL?

Axel
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 10:09:34
Es klappt auch nicht wenn ich die konsistenz ausschalte.
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 10:40:32
Es klappt auch nicht wenn ich die konsistenz ausschalte.

Wenn die DB lokal liegt muss die konsistente ACL eingeschaltet sein.

Hast du schon mal versucht die einzelnen Bedingungen der HideWhen-Formel einzeln zu testen.
D.h. erst @UserName=From und dann @IsNotMember("[creator]"; @UserRoles) und wenn dann beides einzeln funktioniert mit der Verknüpfung.

Ich tippe fast darauf, dass @Username was anderes liefert, als im Feld From drinsteht.
 
Axel

 
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: umi am 20.02.06 - 10:46:16

Vorname Nachname/Devision/Firma    

Ja es wird lokal getestet, da der Testserver offline ist, wegen ein paar Updates von Datenbanken.
@Username liefert doch CN=Vorname Nachname/OU=Division/O=Firma
Bist Du sicher dass From nur Vorname Name/Division/FIrma liefert? Da geht nämlich jeder vergleich mit "=" flöten...
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 10:46:32
Ich habe die konsistenz eigentlich immer aktiviert. Auch jetzt ist sie aktiv.
Also:
@UserName=From --> wenn ich nicht der Author bin, wird er nicht angezeigt.

Wenn ich aber: @IsNotMember("[creator]"; @UserRoles) rein schreibe, wird der Button nicht mehr angezeigt, obwohl ich in dieser Role bin.

Edit: ja bin mir ganz sicher.
Jetzt steht dort drin:
Vorname Nachname/Division/Firma, [creator]
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: ascabg am 20.02.06 - 11:05:35
Hi,

Ist zwar logisch dasselbe, aber versuch doch mal folgendes:

!@IsMember("[creator]"; @UserRoles).

Ich hatte auch schon einmal aehnliche Probleme, welche sich mir dieser Formel wie von selbst geloest haben.

Andreas
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 11:18:42
OK jetzt geht gar nichts mehr!

Ich habe jetzt mal zwei Felder gemacht, also das Authoren Feld und die Role auseinadergenohmen. Es geht einfach nicht ich verzweifle echt langsam.

Nachdem ich das Feld wieder zusammengenommen habe, also so: @UserName : "[creator]", gehen meine Docs zwar wieder aber alle anderen nicht, obwohl ich in der richtigen Role bin.
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: umi am 20.02.06 - 11:22:47
Nur mal so am Rande
Die Rollen sind Case Sensitive bzw. die @isMember auch .....
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 11:29:16
OK jetzt geht gar nichts mehr!

Ich habe jetzt mal zwei Felder gemacht, also das Authoren Feld und die Role auseinadergenohmen. Es geht einfach nicht ich verzweifle echt langsam.

Nachdem ich das Feld wieder zusammengenommen habe, also so: @UserName : "[creator]", gehen meine Docs zwar wieder aber alle anderen nicht, obwohl ich in der richtigen Role bin.

Was soll denn das mit der HideWhen-Formel des Buttons zu tun haben ?

Aber nur mal so 'ne Frage am Rande.

In den Feldeigenschaften hast du die Option "Mehrfachwerte zulassen" gesetzt?

Axel

Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 12:09:32
Ich habe das Ganze bei mir mal nachgestellt und mit dieser HideWhen-Formel für den Button sollte es funktionieren:

!(@UserName=From) & @IsNotMember("[creator]"; @UserRoles)

Voraussetzung ist natürlich, dass der Username im Feld Form in diesem Format, CN=Vorname Nachname/OU=Division/O=Firma, vorliegt und dass, wenn die DB lokal liegt die konsistente ACL aktiviert ist.

 
Axel
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 12:59:49
Alle Infos hier mal zusammengefasst:

Formular Felder:
Author: Text / computed for display
value: @UserName
Country: combobox / editable
City: dialog list / editable
Location: dialog list / editable
detail: text / editable
Configuration: RichText / Editable

HiddenFields:
showname: Text / computed for display
value: @Name([CN];Author)
From: Authors / Computed / Allow multiple values
value: @UserName : "[Creator]"

Buttons:
acsave: immer sichtbar
acclose: immer sichtbar
acedit: hide when --> Formel: !@UserName=From | !@IsMember("[creator]"; @UserRoles)

DB:
People, Server, Groups:
-Default- --> Editor ( keine Rolen )
Mein Name --> Manager ( Alle Rolen )

Rolen:
Creator
DBOwner
Developers

Sonstiges:
Enforce a consistent ACL across all replicas


Edit: Man... wieso geht es mit & ??? Jetzt geht es:
!(@UserName=From) & @IsNotMember("[Creator]"; @UserRoles)
!(@UserName=From) | @IsNotMember("[Creator]"; @UserRoles)

Cool danke erstmal. Ich weiss zwar nicht wieso das jetzt läöuft mit einem AND und nicht mit einem OR.

Jetzt habe ich aber direkt noch eine Frage:
Ich habe im Querysave folgenden Code:

Sub Querysave(Source As Notesuidocument, Continue As Variant)
      'Created on 13.02.06 by someone
   Dim ThisDoc As NotesDocument
   Set ThisDoc = Source.Document
   'Checks the mandatory fields and stops saving if a field is empty
   If Source.FieldGetText("country") = "" Then
      source.GotoField("country")
      Messagebox "Country field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If
   Source.Close
End Sub

Das klappt auch soweit, dass wenn ich das Feld leer lasse kommt die Meldung, aber danach kommt ein Fehler: Cannot execute the specified command.
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: umi am 20.02.06 - 15:05:59
Das liegt jetzt an den logischen operatoren:
!(@UserName=From) & @IsNotMember("[Creator]"; @UserRoles)
=> @username != from & @isnotmember("[Creator]";@userroles)

!(@UserName=From) | @IsNotMember("[Creator]"; @UserRoles)
=> @username!=from | @IsNotMember("[Creator]"; @UserRoles)
=> @username=from &  @isMember("[Creator]"; @UserRoles)

Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: koehlerbv am 20.02.06 - 15:18:06
Kleine Anmerkung: Auf einmal wird Creator ja gross geschrieben ... Der vorherige Vergleich auf "[creator]" konnte dann auch nicht klappen.

Zum QuerySave: Ein Source.Close hat da aber nichts zu suchen.

Bernhard
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 15:35:01
Kleine Anmerkung: Auf einmal wird Creator ja gross geschrieben ... Der vorherige Vergleich auf "[creator]" konnte dann auch nicht klappen.

Keine Angst das habe ich immer korrigiert ;)

Zum QuerySave: Ein Source.Close hat da aber nichts zu suchen.

Wenn ich das aber weglasse, dann kommt zwar der Fehler, speichern lässt sich das Dokument aber trotzdem
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 15:54:29
Wenn das der Code im Querysave - Event ist, dann sollte das aber funktionieren.

Mit Continue = False wird das Speichern abgebrochen und mit Exit Sub wird die Ausführung des Events beendet.

Code
Sub Querysave(Source As Notesuidocument, Continue As Variant)
   'Created on 13.02.06 by someone
   Dim ThisDoc As NotesDocument
   Set ThisDoc = Source.Document
   'Checks the mandatory fields and stops saving if a field is empty
   If Source.FieldGetText("country") = "" Then
      source.GotoField("country")
      Messagebox "Country field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If
End Sub

Woran erkennst du denn, dass das Dokument gespeichert wird.


Axel
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 16:15:25
Sub Querysave(Source As Notesuidocument, Continue As Variant)
      'Created on 13.02.06 by someone
   Dim ThisDoc As NotesDocument
   Set ThisDoc = Source.Document
   'Checks the mandatory fields and stops saving if a field is empty
   If Source.FieldGetText("country") = "" Then
      source.GotoField("country")
      Messagebox "Country field is empty",  0 + 48, "Failure"
      Exit Sub
   End If      
   If Source.FieldGetText("city") = "" Then
      source.GotoField("city")
      Messagebox "City field is empty",  0 + 48, "Failure"
      Exit Sub
   End If   
   If Source.FieldGetText("location") = "" Then
      source.GotoField("location")
      Messagebox "Location field is empty",  0 + 48, "Failure"
      Exit Sub
   End If   
   If Source.FieldGetText("detail") = "" Then
      source.GotoField("detail")
      Messagebox "Detail field is empty",  0 + 48, "Failure"
      Exit Sub
   End If   
   If Source.FieldGetText("Description") = "" Then
      source.GotoField("Description")
      Messagebox "Description field is empty",  0 + 48, "Failure"
      Exit Sub
   End If   
End Sub



Das ist mein Code.
Woran ich das sehe, ich sehe das Dokument in den Views ;)

Edit: Mann mann mann, ich habe noch einen sehr spezielen Fehler :) Immer wenn ich die DB aufmache mit einem Doppelklick auf das Icon gehen gleich zwei Formulare mit auf. Aber komischerweise nicht immer, sondern so nach Lust und Laune ???
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: koehlerbv am 20.02.06 - 16:18:36
Und wo ist das Continue = False abgeblieben? Das Event heisst ja QUERYsave - gespeichert wird später - solange nicht Continue = False ist.

Bernhard
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 16:25:11
Habe ich einfach rausgelassen weil sonst wieder der Fehler kommt: Cannot execute the specified command.

Um die anderen FUnktionen zu testen ist es einfacher wenn der Fehler nicht kommt ;)
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: koehlerbv am 20.02.06 - 16:28:03
Vorhin war es doch noch Call Source.Close, was (logischerweise) den Fehler warf ...
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 16:37:36
Ach so, nein sorry, das war mein Fehler. Es geht so wie es jetzt oben steht nicht.
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: koehlerbv am 20.02.06 - 16:44:38
Jetzt wird es langsam unüberschaubar.
Wenn Du mit  dem "das was oben steht" Posting #26 meinst, dann funktioniert der Code dahingehend, dass beim ersten Zutreffen eines Vergleichs eine Meldung ausgegeben wird, und dann wird das Dokument gespeichert. Wie in #27 beschrieben.

Axels Posting #25 zeigt das gängige und funktionierende Verfahren.

Bernhard
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 16:48:16
Axels Posting #25: Ja und wie soll ich das jetzt für mehrere Felder machen? So wie ich es in Posting #26 gemacht habe oder?
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 16:59:22
Axels Posting #25: Ja und wie soll ich das jetzt für mehrere Felder machen? So wie ich es in Posting #26 gemacht habe oder?

Genau. Nur musst du nach jeder Messagebox ein Continue = False einfügen.

Sub Querysave(Source As Notesuidocument, Continue As Variant)
      'Created on 13.02.06 by someone
   Dim ThisDoc As NotesDocument
   Set ThisDoc = Source.Document

   'Checks the mandatory fields and stops saving if a field is empty
   If Source.FieldGetText("country") = "" Then
      source.GotoField("country")
      Messagebox "Country field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If     

   If Source.FieldGetText("city") = "" Then
      source.GotoField("city")
      Messagebox "City field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If   

   If Source.FieldGetText("location") = "" Then
      source.GotoField("location")
      Messagebox "Location field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If   

   If Source.FieldGetText("detail") = "" Then
      source.GotoField("detail")
      Messagebox "Detail field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If   

   If Source.FieldGetText("Description") = "" Then
      source.GotoField("Description")
      Messagebox "Description field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If   

End Sub

Axel
 
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 17:06:35
Ja nur kommt der Fehler dann immer noch, es lässt sich zwar nicht speichern, aber der Fehler bleibt der selbe. Zurzeit habe ich etwa die 10te Version vom Code drin, aber der Fehler will und will nicht weg  :-[
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: koehlerbv am 20.02.06 - 17:09:18
Über welchen Fehler sprechen wir denn jetzt gerade? Und wo ist Dein Code?
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 20.02.06 - 18:09:42
Das ist der Code:

Sub Querysave(Source As Notesuidocument, Continue As Variant)
      'Created on 13.02.06 by someone
   Dim ThisDoc As NotesDocument
   Set ThisDoc = Source.Document

   'Checks the mandatory fields and stops saving if a field is empty
   If Source.FieldGetText("country") = "" Then
      source.GotoField("country")
      Messagebox "Country field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If     

   If Source.FieldGetText("city") = "" Then
      source.GotoField("city")
      Messagebox "City field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If   

   If Source.FieldGetText("location") = "" Then
      source.GotoField("location")
      Messagebox "Location field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If   

   If Source.FieldGetText("detail") = "" Then
      source.GotoField("detail")
      Messagebox "Detail field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If   

   If Source.FieldGetText("Description") = "" Then
      source.GotoField("Description")
      Messagebox "Description field is empty",  0 + 48, "Failure"
      Continue = False
      Exit Sub
   End If   

End Sub

Das ist der Fehler:
Cannot execute the specified command
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 20.02.06 - 19:13:40
Wenn ist das so sehe und wenn das der gesamte Code ist, der im QuerySave-Event drin steht, dann kommt der Fehler nicht daher.

Hast du Teilmasken mit weiterem Code eingebunden?

Sind in den Feldern Eingabevalidierungen oder Eingabeumsetzungen enthalten?

Gibt's in anderen Events (u.a. PostSave) noch irgendwelchen Code?

Hast du auch schon mal den Debugger bemüht?

Fragen über Fragen, auf die wir eine Antwort brauchen um weiterhelfen zu können.

Axel
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: judicious am 21.02.06 - 09:15:02
Ok, ich denke ich weiss wo der Fehler liegt, nur weiss ich nicht genau wieso, er ausgelöst wird!
Wenn ich CTRL + S drücke kommt der Promp, das Feld sei leer und fertig, drücke ich auf den Save Button, kommt auch der Prompt plus dem Fehler: Cannot execute the specified command.

Der Button hat folgende Formel:
@Do(@Command([FileSave]);@Command([EditDocument];0))
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: koehlerbv am 21.02.06 - 09:24:03
FileSave wirft den Fehler, und gleichzeitig soll das Dokument in den Read Mode versetzt werden - das beisst sich natürlich.

Wozu überhaupt diese Kombination von @Commands? Das so erzeugte Verhalten muss ja der User nun nicht unbedingt als ergonomisch empfinden ...

Bernhard
Titel: Re: Problem mit Dokument Berechtigungen
Beitrag von: Axel am 21.02.06 - 09:44:36
Wenn du schon nach dem Speichern in den Lesemodus willst (ob' Sinn macht oder nicht, steht auf einem anderen Blatt und kommt auf den Einzelfall an), dann solltest du das im PostSave-Event machen.

So z.B.

Sub Postsave(Source As Notesuidocument)
   
  Call Source.EditMode = False

End Sub


Axel