Das Notes Forum
Domino 9 und frühere Versionen => Entwicklung => Thema gestartet von: gentleman am 24.09.04 - 11:35:09
-
hi,
ich habe eine db mit verschiedenen bearbeitungsberechtigungen, welche mir gerade probleme machen :)
Ich habe ein Feld mit dem Namen Signatur1, in dem der Username, des aktuellen Bearbeiters per Knopfdruck gespeichert wird.
So gehe ich vor, wenn ich erreichen will, dass die rolle markt nicht in den dok_status 5 rein darf (dok_status 5 wird ebenfalls in nem feld hinterlegt):
@If(@Contains(@UserRoles;"[Markt]") & (@If(@Contains(dok_status;"5")));@Do(@Prompt([OK]; "Halt"; "Sie haben keine Berechtigung zum Bearbeiten!"); @Return(""));
das funktioniert.
nur jetzt brauch ich ne formel, dass die rolle markt nicht in das dok 5 rein darf (siehe oben) ABER dass die rolle markt dann in dok_status 5 rein darf, wenn es der ersteller des dokuments ist - dieser wird im feld signatur1 hinterlegt...
aber ich komm nich drauf
hat da jemand nen tip?
wäre super klasse :)
danke schonmal
marc :)
-
Da fehlt doch nur noch
& Signatur1 != @UserName
Bernhard
-
hey,
danke für die schnelle antwort...
habs so probiert:
@If(@Contains(@UserRoles;"[Markt]") & Signatur1 != @V3UserName & (@If(@Contains(dok_status;"5")));@Do(@Prompt([OK]; "Halt"; "Sie haben keine Berechtigung zum Bearbeiten!"); @Return(""));
geht aber leider nicht :(
-
Zunächst fehlt Deiner Formel der Else-Zweig.
Wo hast Du die Formel eigentlich zu stehen ?
Bernhard
-
Wieso nimmst Du denn eine andere Formel, als Bernhard dir empfiehlt ?
V3UserName gibt den gekürzten Usernamen zurück, wenn in Signatur1 der kanonische Name steht, kann das auch nur in die Hose gehen.
-
hi,
erstmal danke für die schnellen antworten.
ich hol mal schnell etwas aus.
ich hab ein feld signatur1.
in dieses feld wird der username geschrieben. das geschieht per buttonklick; auf dem button is der code:
FIELD Signatur1:=Signatur1;
@SetField("Signatur1";@Name([CN]; @Subset(@V3UserName; 1)));
@Command([ViewRefreshFields])
ok...
jetz hab ich das dokument das vom status 1-6 geht...
die rolle markt darf nur in status 1 und 3 rein, sonst nirgends!
ABER: die rolle markt darf auch in status 5 rein, wenn es der ersteller ist (also im feld signatur1 der name....) der rest der gruppe markt darf logischerweise nich rein.
V3UserName hab ich also genommen, weil auf dem button auch V3UserName verwendet worden is...
auf dem bearbeiten button (um in das dokument reinzukommen), ist der code, den ich hier suche...
ich komm echt nimmer weiter :(
würde mich sehr freuen wenn ihr mir da auf die sprünge helfen könntet :)
danke
marc
-
Ich habe keinen Plan, warum das bei Dir nicht funktionieren sollte ... Arbeitest Du evtl. lokal ohne konsistente ACL ?
Allerdings ist Dein Verfahren ein äusserst unsicheres: Du kannst ja keinen zwingen, den Bearbeiten-Button zu drücken, die User können StrgB verwenden, über's menü gehen, einen Doppelklick im Dokument machen ...
Bernhard
-
hi,
strg +b und und und geht nicht, is alles im querymodechange geregelt... von daher is es sicher...
Zitat: "Arbeitest Du evtl. lokal ohne konsistente ACL?" bin überfragt :) die db liegt aber auf nem server...
ich spiel nochmal a bissl rum, aber vorhin gings nich...
weder mit @V3UserName oder mit @UserName
danke trotzdem
marc :)
-
strg +b und und und geht nicht, is alles im querymodechange geregelt... von daher is es sicher...
Im PostOpen prüfst Du auch ?
Zitat: "Arbeitest Du evtl. lokal ohne konsistente ACL?" bin überfragt :) die db liegt aber auf nem server...
Hm, dann passt das auf jeden Fall.
-
Im PostOpen prüfst Du auch ?
ne da nich...
aber man kommt in das dok nich rein ohne die richtigen rechte - alles schon getestet...
mein autor problem besteht allerdings nach wie vor :(
gibts da nich ne andere möglichkeit das zu lösen???
danke
marc :)
-
Dann selektiere mal in der Ansicht ein Dokument und drücke Strg-B. Da wird dann keine QueryModeChange ausgeführt ...
Bernhard
-
hey,
genialer tip - haste recht, da gehts... :)
muss im postopen der gleiche code wie im querymodechange stehen?
danke
marc :)
-
Das ist doch nicht weiter tragisch, wenn der nicht berechtigte User sich zwar die Finger wund editieren kann, aber seine Änderungen nicht speichern darf... und das abzufackeln ist nun wirklich kein Problem und der User hat sich zu früh gefreut :)
-
Das ist doch nicht weiter tragisch, wenn der nicht berechtigte User sich zwar die Finger wund editieren kann, aber seine Änderungen nicht speichern darf... und das abzufackeln ist nun wirklich kein Problem und der User hat sich zu früh gefreut :)
dann musst du aber den speichern button mit codes versehen...
is schon cooler wenn man da gleich gar ned rein darf... :)
-
Im PostOpen brauchst Du nur den EditMode auf False zu setzen. Achtung - dabei triggerst Du dann QueryModeChange !
Wieso arbeitest Du eigentlich nicht mit Autorenfeldern ? Da wärst Du das ganze Gedöhns doch los und hast eine sicherere Anwendung.
Bernhard
-
Etwas Code im Speichern-Button sollte schon sein, damit die User-Gemeinde über ESC keinen Unfug anstellt. ;)
Ich bin aber auch ein Verfechte von Leser- und Autorenfeldern. Das gibt mehr Sicherheit, aber lass dir ein Hintertürchen offen, damit du noch an die Dok`s kommst.
-
Wieso arbeitest Du eigentlich nicht mit Autorenfeldern ? Da wärst Du das ganze Gedöhns doch los und hast eine sicherere Anwendung.
AH! zu viele infos auf einmal :D
das teil kenn ich ned :D
und zum postopem...
hab in der hilfe das gefunden:
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
uidoc.EditMode = True
dabei bringt er zwar ne meldung - bearbeiten nich möglich, aber wenn man die bestätigt, dann kommt man trotzdem rein :D
-
If DeineBedingung then
Source.EditMode = False
End If
reicht doch vollkommen ...
Bernhard
-
If DeineBedingung then
Source.EditMode = False
End If
hi,
wollte eigentlich nimmer stören, aber das klappt nicht!
has so probiert:
If source.EditMode And Not source.IsNewDoc Then
Source.EditMode = False
End If
und noch einige male anders...
klappt aber nicht. es erscheint zwar die meldung bearbeiten nicht möglich, aber wenn man ok drückt is man drin...
marc
-
Die Meldung sollte ja im QueryModeChange stehen - und dessen Code wäre nun interessant. Wenn dort davon ausgegangen ist, dass der EditMode True ist ...
Bernhard
PS: Geh' die Events mal im Debugger durch und schau Dir die UIDoc-Properties in den jeweiligen Events an.
PPS: Mit Autorenfelder wäre Dir das nicht passiert - in Workflow-Apps sind die IMHO einfach ein Must-have. Bei Marketing steht das zwar nicht gerade zu erwarten ;D, aber wenn sich da ein etwas begabterer User einen Agent selber schraubt, dann nutzt Dir Deine Front-End-"Sicherheit" gar nichts.
-
OK :)
hier mal mein querymodechangecode:
Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
Dim session As New NotesSession
Dim workspace As New NotesUIWorkspace
Dim doc As NotesDocument
Dim uidoc As NotesUIDocument
Dim db As NotesDatabase
Dim ein As String
ein = session.GetEnvironmentString("ProblemEintritt")
Set uidoc = workspace.CurrentDocument
Set doc = uidoc.document
Dim acl As notesacl
Set db = session.CurrentDatabase
Dim entry As notesaclentry
Set acl = db.ACL
Set entry = acl.GetEntry(Session.UserName)
If doc.dok_status(0) = "6. Abgeschlossen" And Not entry.IsRoleEnabled( "[Admin]" ) Then
Messagebox "Dokument ist bereits abgeschlossen!", OK, "Fehler"
continue = False
Else
If doc.dok_status(0) = "hugo" Then
continue = True
Else
If Not (ein = "Ja") Then
Messagebox "Eine Bearbeitung des Dokuments ist nur über die Schaltfläche ''Bearbeiten'' möglich", OK, "Fehler"
continue = False
End If
End If
End If
End Sub
und das mit den autorenfeldern bringt mir nix....
ich brauch ja nich den autor, sondern den der die Signatur abgibt (muss nich zwingend der autor sein)
d.h. wenn einer das erstellt, heisst das nich gleich, dass er auch in status 5 rein darf :)
marc
-
Set entry = acl.GetEntry(Session.UserName)
If doc.dok_status(0) = "6. Abgeschlossen" And Not entry.IsRoleEnabled( "[Admin]" ) Then
Gefährlich, gefährlich. Arbeitest Du nur mit Namenseinträgen in der ACL ? An Gruppen kommst Du so ja gar nicht 'ran ...
und das mit den autorenfeldern bringt mir nix....
ich brauch ja nich den autor, sondern den der die Signatur abgibt (muss nich zwingend der autor sein)
d.h. wenn einer das erstellt, heisst das nich gleich, dass er auch in status 5 rein darf :)
Nun, das hat jetzt aber nix mit Autorenfeldern zu tun. Selbst der Ersteller eines Doks muss ja zwingend in einem Autorenfeld stehen. Du als Entwickler bestimmst das doch, wer in dem / den Autorenfeldern steht.
Ich glaube, da musst Du nochmal etwas Literatur in die Hand nehmen ;)
Bernhard