Eigene Erweiterung -> Bearbeiten nur durch Admin möglich?

  • kingmar kingmar
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    17. 07. 2013, 15:21

    Guten Tag, ich habe eine Frage zu einer Eigenen Erweiterung. Ich habe mit dem Extension Builder eine Erweiterung geschrieben und über das Backend einige Datensätze eingetragen. Diese sollen für die Frontenduser auch sichtbar sein, jedoch soll ein angemeldeter Administrator diese auch bearbeiten können, was normale User nicht können sollen. Wie kann ich so etwas realisieren?

    Erweiterung mit dem Extension Builder:
    Hier kann man ja Einstellungen bzgl. Fronend und Backend Plugin wählen, ich habe meine Erweiterung jetzt ausschließlich als Frontend Erweiterung gewählt.


  • kitsunet kitsunet
    Flash Gordon
    0 x
    2559 Beiträge
    27 Hilfreiche Beiträge
    17. 07. 2013, 19:15

    Ein angemeldeter Administrator?

    Reden wir jetzt über Frontend oder Backend Benutzer? Die sind ja ganz klar getrennt. Also willst Du für normale Besucher der Seite nur die Daten anzeigen für einen Frontendbenutzer in einer Administrator Gruppe aber bearbeitbar machen?

    config.baseURL = http://www.kitsunet.com/
    TYPO3 Flow und Neos Community Contact
    Release Manager TYPO3 Neos 1.1
    Ich habe Probleme mit den PMs hier, also schreibt mir bitte eine Mail oder über Twitter!

  • kingmar kingmar
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    18. 07. 2013, 15:11

    Ja genau. Also es soll sich um das Frontend handeln. Ich habe über das Backend Daten eingepflegt (Also Zahlen von 1-100 für die Felder). Und zwar handelt es sich um Tabellenfelder mit Zahlen als Inhalt (zB. Feld 1 mit der Zahl 1 usw. bis 100. Hier sollen die Frontend User dann draufklicken können und Ihren Namen zu einer Zahl eintragen können (hier wird dann bei einem Klick auf die Zahl, die EDIT Funktion aufgerufen). Es sollen hier dann nur von den Frontend Benutzern der Name eingetragen werden können. Danach soll hier keine Eingabe mehr erfolgen können, sonder nur der Name angezeigt werden. Als Administrator im Backend oder angemeldet im Frontend sollen hier noch weitere Felder editierbar sein (z.B. eine Checkbox, ob der Name erscheinen soll oder nicht).

  • kingmar kingmar
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    29. 07. 2013, 16:05

    Keiner eine Idee?

  • Norman2k Norman2k
    Jedi-General
    0 x
    1657 Beiträge
    80 Hilfreiche Beiträge
    30. 07. 2013, 14:53

    $GLOBALS['BE_USER']->user['admin'] --> angemeldeter BE-User ist Admin (1) oder nicht (0)

  • jank jank
    Sternenflotten-Admiral
    0 x
    158 Beiträge
    0 Hilfreiche Beiträge
    30. 07. 2013, 15:18

    Für eine Extbase Extension würde ich per settings die Gruppen UID übergeben.
    Dann in Fluid die ID abfragen und den Link nur dann anzeigen:

    1. <f:security.ifHasRole role="{settings.adminGroupUid}">
    2. <f:link.action action="edit">edit</f:link.action>
    3. </f:security.ifHasRole>

    Dann musst Du noch in den new/edit/create/update action oder in einer initializeAction abfragen ob der User auch wirklich in der Gruppe ist da die URL ja trotzdem aufrufbar ist:
    1. if(in_array($this->settings['adminGroupUid'], $GLOBALS['TSFE']->fe_user->groupData['uid']) {
    2. // user is in the right group
    3. } else {
    4. // some error handling, e.g. log ip and username
    5. }

  • kingmar kingmar
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    30. 07. 2013, 17:47

    Hey danke für die Antworten... Hab jetzt erstmal nur die

    1. <f:security.ifHasRole role="{settings.adminGroupUid}">
    2. <f:link.action action="edit">edit</f:link.action>
    3. </f:security.ifHasRole>

    mit meiner edit Funktion getauscht, aber jetzt werden gar keine Felder mehr dargestellt. Was genau bewirkt die role="{settings.adminGroupUid}" kann hier auch noch was anderes stehen? Bei der Actionanpassung steht TSFE was hat das zu bedeuten? Und wie genau kontrolliere ich auch die UID, die ist 5 in meinem Backend.

  • kingmar kingmar
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    31. 07. 2013, 13:18

    Bekomme in Zeile 1 immer einen Syntax Error wegen der {

    da fehlte eine Klammer! :)

  • jank jank
    Sternenflotten-Admiral
    0 x
    158 Beiträge
    0 Hilfreiche Beiträge
    31. 07. 2013, 15:05

    Sorry, richtig, da fehlt ne Klammer...

    1. if (in_array($this->settings['adminGroupUid'], $GLOBALS['TSFE']->fe_user->groupData['uid'])) {
    2. // user is in the right group
    3. } else {
    4. // some error handling, e.g. log ip and username
    5. }

    Das erste war für den Link im z.B. List Template auf die Edit Action gedacht, NICHT für die Edit Action an sich. Da brauchst du natürlich das Form.

    Der security.ifHasRole ViewHelper bewirkt, dass der Inhalt nur für Benutzer in der Gruppe die du ihm übergibst anzeigt. Mit {settings.adminGroupUid} übergibst du ihm eine Gruppen UID die du vorher per TypoScript

    1. plugin.tx_myextkey{
    2. #...
    3. settings.adminGroupUid = 5
    4. }

    oder per FlexForm definiert hast.

  • kingmar kingmar
    T3PO
    0 x
    17 Beiträge
    0 Hilfreiche Beiträge
    31. 07. 2013, 18:23

    Also ich hab das jetzt mal getestet, indem ich eine neue Gruppe erstellt habe und diese dann erstmal im list Template (Resources->Private->.. Template) eingetragen habe. Also die Gruppe heißt "TESTGRP" und diese haben ich so eingetragen:

    1. <f:security.ifHasRole role="TESTGRP">
    . Bei der entsprechenden Action hab ich erstmal nichts eingetragen, geht aber auch so!

    Wo geben ich das TypoScript genau ein? Im Backend bei der entsprechenden Seite über Template? und dann?

    Meine Extension heißt testerweiterung.

    Ich habe Tabellenfelder mit Inhalten (Zahlen von 1-10). Alle Besucher können diese Zahlen anklicken und hier ihren Namen hinterlegen (das geht auch schon soweit) Wurde einmal ein Name eingetragen und gespeichert ist kein weiteres editieren mehr möglich (außer durch Admin). Die Besucher sollen aber noch auf die Zahlen klicken können aber nur noch den Namen lesen können:

    1. <f:form.textfield property="zahl" disabled="disabled"/>

    kann ich dann die disabled funktion benutzen oder was würde sich da anbieten?

    Wie kann ich genau überprüfen, ob ein Textfeld leer ist oder nicht? Mache ich dann zwei editActions einmal mit enabled und eine mit disabled oder wie?