[Frage] Zugriff auf Objekte beschränken - Best Practice [Gelöst]

  • 0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    15. 09. 2015, 19:44

    Hallo,

    wie kann ich den Zugriff auf Objekte am Besten beschränken. Beispiel: Ich möchte, dass ein Benutzer nur bestimmte Blogs bearbeiten kann (Bsp. Benutzer1>Blog1, Benutzer2>Blog2 usw).

    Was ich bisher gemacht habe:

    Ein Benutzer-Tabelle angelegt, die auf fe_users gemappt. Eine n:m-Relation von Blog zu Benutzer. In der ListAction des Contollers zum Bearbeiten lasse ich nur die Blogs des eingeloggten Benutzers anzeigen. Soweit OK.

    Jetzt ergibt sich folgendes Problem: Ich logge mich als Benutzer1 ein. Es wird Blog1 angezeigt. Ich gehe auf bearbeiten und kopiere den Link aus dem Browser. Ich logge mich wieder aus und neu ein als Benutzer2. Blog1 wird nicht angezeigt, wenn ich aber den kopierten Link einfüge, kann ich auch Blog1 bearbeiten.

    Wie verhindere ich das am Besten? Möglichst so, dass an zentraler Stelle die Zugriffsrechte geprüft werden und ich bei der Weiterentwicklung nicht durch Unachtsamkeit neue Lücken einbaue.

    Danke und viele Grüße
    Wonko

  • Donpeponi Donpeponi
    TYPO3-Anwärter
    1 x
    4 Beiträge
    1 Hilfreiche Beiträge
    17. 09. 2015, 07:04 - Lösung

    Du kannst das ganze in der initializeAction definieren oder auch ganz in einen Sicherheits Service z.B. auslagern.

    Dort könntest du gleich auch Adminrechte überprüfen oder wie du willst.

    [code]

    1. public function initializeAction(){
    2. // den aktuell eingeloggten FE-User im ganzen Controller verfügbar machen
    3. $uid = $GLOBALS['TSFE']->fe_user->user['uid'];
    4. $this->feUser = $this->userRepo->findByUid($uid);
    5.  
    6. if($this->request->hasArgument("blog")){
    7. $blog = $this->request->getArgument("blog");
    8. ...
    9. }
    10. }
    [/code]


  • 1
  • Donpeponi Donpeponi
    TYPO3-Anwärter
    0 x
    4 Beiträge
    1 Hilfreiche Beiträge
    16. 09. 2015, 13:44

    Hallo,

    du hast einen ObjectStorage für die Blogs?

    Dann kannst du einfach beim aufruf der editAction eine Abfrage machen, ob der aktuelle User diesen Blog hält.

    1. if($this->feUser->getBlogs()->contains($actualBlog)){
    2. ...render template
    3. }else{
    4. .. mach etwas anderes (z.B. redirect)
    5. }

  • 0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    16. 09. 2015, 20:14

    Dann muss ich nur in jeder Action die Rechte prüfen. Das geht halt gerne mal vergessen, wenn man später was ergänzt. Kann man das nicht an zentraler Stelle abfragen? Gibt es eine Möglichkeit, in der initializeAction zu prüfen, ob ein Blog übergeben wurde?

  • Donpeponi Donpeponi
    TYPO3-Anwärter
    1 x
    4 Beiträge
    1 Hilfreiche Beiträge
    17. 09. 2015, 07:04

    Du kannst das ganze in der initializeAction definieren oder auch ganz in einen Sicherheits Service z.B. auslagern.

    Dort könntest du gleich auch Adminrechte überprüfen oder wie du willst.

    [code]

    1. public function initializeAction(){
    2. // den aktuell eingeloggten FE-User im ganzen Controller verfügbar machen
    3. $uid = $GLOBALS['TSFE']->fe_user->user['uid'];
    4. $this->feUser = $this->userRepo->findByUid($uid);
    5.  
    6. if($this->request->hasArgument("blog")){
    7. $blog = $this->request->getArgument("blog");
    8. ...
    9. }
    10. }
    [/code]

  • 0 x
    18 Beiträge
    0 Hilfreiche Beiträge
    18. 09. 2015, 21:33

    Danke, die Lösung habe ich jetzt umgesetzt.

    Ein Hinweis noch:

    1. $this->request->getArgument("blog");

    liefert die ID, nicht den Blog. Aber den kann man sich ja mit findByUid im Repository suchen. :)

  • 1