Seite 1 von 1

EditRechte im Browse nur für einen User [erledigt]

Verfasst: Do, 15. Okt 2015 11:52
von Ewald
Ich möchte, das nur ein bestimmter User in einer Tabelle Änderungen vornehmen kann. Alle anderen sollen nur browsen können.
Das hier hatte ich schon scharf gestellt da es funktionierte. Aber wie ich jetzt durch wütende Proteste erfahren habe leider nur, wenn der vuser auch "ADMIN" ist. Der kann browsen und editieren.
Aber alle anderen können in der Tabelle dann nicht nur "nicht editieren", sie können in der Tabelle auch nicht browsen. Der Cursor lässt sich in der Tabelle nicht bewegen.

Code: Alles auswählen

@ 5,0 dcbrowse ob1 alias _hospital size 133,34 fit ;
      edit xbeBRW_ItemSelected when {||vuser="ADMIN"}; 
     

Ein Editprotect an allen Feldern war auch ein Schuss in den Ofen. Der Cursor saust automatisch durch alle Felder/Zeilen der Tabelle wenn der vuser nicht "ADMIN" ist. Das ist sehr störend, da die Tabelle über 2 Mio Einträge hat ;-)

Code: Alles auswählen

@ 5,0 dcbrowse ob1 alias _hospital size 133,34 fit ;
      edit xbeBRW_ItemSelected ; 
dcbrowsecol field blah1 Header "Blah1" editprotect when {||vuser <> "ADMIN"
dcbrowsecol field blah2 Header "Blah2" editprotect when {||vuser <> "ADMIN"
     
Wo und wie muss ich den Schalter denn wohl setzten, damit die Tabelle von jedem "gebrowst" werden kann, aber nur editiert werden kann, wenn der vuser auch "ADMIN" ist ?

Re: EditRechte im Browse nur für einen User

Verfasst: Do, 15. Okt 2015 12:05
von Koverhage
probier es mal mal der EDITOR clause. Ich habe es nicht getestet, der User müsste das Feld anklicken können aber die Daten nicht verändern.

Re: EditRechte im Browse nur für einen User

Verfasst: Do, 15. Okt 2015 12:30
von brandelh
Item Selected darfst du dafür nicht verwenden, weil je nach Maus oder Taste selected oder marked nötig ist.
Ich würde das tiefer abfangen, wenn du nicht grundssätzlich den browse auf readonly setzen kannt.

Also für jeden deine Editfunktion aufrufnen und in der dann prüfen ob editieren ja oder nein ...

Re: EditRechte im Browse nur für einen User

Verfasst: Do, 15. Okt 2015 12:45
von Koverhage
Noch eine Idee:

IF erlaubt
dann Tabelle mit edit clause
ELSE
Tabelle ohne edit clause
ENDIF

Re: EditRechte im Browse nur für einen User

Verfasst: Do, 15. Okt 2015 13:00
von Ewald
@Hubert,
moin, das habe ich ja versucht und alle Felder auf editprotect gesetzt. Dann entwickelt der Browser aber ein Eigenleben ;-)
Es werden der Reihe nach die Felder angesprungen und der Cursor läuft automatisch weiter. Zeile für Zeile für Zeile.

@Klaus,
ich denke, das mit den verschiedenen Browseobjekten klingt vielversprechend. Ich werde berichten.

Re: EditRechte im Browse nur für einen User

Verfasst: Do, 15. Okt 2015 13:13
von Tom
Die richtige Klausel wäre auch PROTECT auf Spaltenebene. Ergänzend dazu müssen ggf. ITEMMARKED/DATALINK und ITEMSELECTED des Browses selbst konfiguriert werden.

Re: EditRechte im Browse nur für einen User

Verfasst: Do, 15. Okt 2015 13:14
von Ewald
Jep, genau so wollte ich das haben.
Danke und schönen Arbeitstag zusammen.
Ewald

Code: Alles auswählen

vedit:=if(vuser="ADMIN",.t.,.f.)
if vedit
@ 5,0 dcbrowse ob1 alias _hospital size 133,34 fit ;
      edit xbeBRW_ItemSelected  
    else
@ 5,0 dcbrowse ob1 alias _hospital size 133,34 fit 
endif

Re: EditRechte im Browse nur für einen User [erledigt]

Verfasst: Do, 15. Okt 2015 13:19
von Ewald
@Tom,
mojn, hab ich ja wie gesagt mal versucht. Wenn ich im Browse das editieren ermögliche und dann alle Spalten auf protect setzte wird der Browser zum Selbstläufer. Sobald man in das Fenster klickt rast der Cursor alle Zeile durch. Wunderschön anzusehen und bei einer entsprechend riesigen Tabelle auch irgendwie unterhaltsam.

Re: EditRechte im Browse nur für einen User [erledigt]

Verfasst: Do, 15. Okt 2015 13:27
von Tom
EDITPROTECT war ja auch falsch, und noch falscher in der Anordnung "EDITPROTECT WHEN". Einfach "PROTECT {||DarfNicht()}", feddisch. Ein WHEN in einer Browsecolumn ist mit eXpress++ ein Totalkiller.

Alternativ kannst Du auch für <nEditMode> für den Fall der Nichteditierbarkeit einen ungültigen Wert wählen, z.B. -1.

Re: EditRechte im Browse nur für einen User [erledigt]

Verfasst: Do, 15. Okt 2015 13:38
von Ewald
:shock: Wird Zeit das es FEB 2016 wird. Ich sage nur RENTE !!!
Ich hab das protect in 1000 Browsern stehen

Code: Alles auswählen

protect {||if bed,.t.,.f.}
Wie ich jetzt auf das when gekommen bin ? Man weiß es nicht.

Re: EditRechte im Browse nur für einen User [erledigt]

Verfasst: Do, 15. Okt 2015 14:29
von Tom
:lol:

Ich denke allerdings, dass es am sinnvollsten wäre, das über den Editmode zu steuern. Dort kannst Du auch mit Codeblöcken hantieren und z.B. eine Get-Set-Funktion verwenden, die standardmäßig immer den korrekten Modus zurückgibt, und nur dann entsprechende Werte, wenn man nicht editieren darf. Damit könntest Du dann auch mit wenigen Codeänderungen mehrere Browses entsprechend ausstatten.