2016-11-01 6 views
-1

Meine Symfony 3-Webanwendung verfügt über eine Benutzeranmeldung, die von FOSUserBundle verwaltet wird. Es ist in Ordnung, den Anmeldestatus auf der Serverseite zu überprüfen und alle erforderlichen Aktionen zu steuern, die ein Benutzer ausführen kann oder auch nicht.Zugriffssteuerung für Bilder im Web-Frontend

Jetzt kann ein Benutzer Bilder hochladen. Es gibt eine Ansicht, die dem Benutzer alle seine Bilder zeigt. Um dem Frontend die benötigten Img-Pathes für diese User-Galerie-Ansicht zur Verfügung zu stellen, übergebe ich alle Pfade für diese Benutzerbilder an das Frontend und zeige es dort an.

Dies ist, wo ich verwirrt bin: Wie schränke ich den Zugriff auf diese img-Pfade auf den jeweiligen (eingeloggten) Benutzer nur und leugne es allen anderen? Oder: Wie stelle ich Bilder für eine Frontend-Webansicht bereit, ohne einen für alle zugänglichen img-Pfad zu verwenden? Gibt es eine Möglichkeit, dies mithilfe der Symfony/FOSUserBundle-Funktionalität zu tun?

+0

Warum habe ich einen Kommentar ohne Kommentar für diese Frage bekommen? Es offensichtlich nicht zu sehen ... – user3440145

Antwort

0

Dies funktioniert für mich:

alles lassen, wie es aber ein pHP-Skript aufrufen Laden eines Bildes direkt die Bilder stattdessen abzurufen. Also änderte ich nur das "src" -Attribut im img-Tag ein Skript aufrufen und das img-Namen als GET-Parameter in der Regel passieren dies:

<img src="[server]/image.php?img=xy.jpg"> 

Die resultierende Route in Symfony a etwas anders offensichtlich, wie:

<img src="[server]/my/img/loading/route/xy.jpg"> 

In dem Controller die Anforderung erforderlichen Zugriffsrechte der Handhabung ist für das angeforderte Bild überprüft und eine Antwort bereit:

$response = new Response(); 
$response->setContent(file_get_contents($imgPath)); 
$response->setStatusCode(Response::HTTP_OK); 
$response->headers->set('Content-type', $mimeType); 
$response->headers->set('Content-length', filesize($imgPath)); 

returnin g Diese Antwort von der jeweiligen Controller-Aktionsmethode funktioniert nun einwandfrei.

0

benötigen Sie hierfür ACL (Access Control List). Eine Lösung ist eine Tabelle mit imageID und Allowed userID, so dass Sie nach einem bestimmten Bild suchen und auf die erlaubten Benutzer aus dieser Tabelle/Entität zugreifen und den Image-Pfad für diese Benutzer angeben können. Stellen Sie außerdem sicher, dass Sie die richtigen Beziehungen zu image, image_user und Benutzer Entities verwenden.

Wie schränke ich den Zugriff auf diese img-pathes auf den jeweiligen (eingeloggten) Benutzer ein und leugne ihn allen anderen?

Wie stelle ich Bilder zu einer Frontend-Webansicht bereit, ohne einen für alle zugänglichen img-Pfad zu verwenden?

für die beide von oben, in Ihrem Controller, überprüfen Sie das erlaubten Bilder für den angemeldeten Benutzer in image_user und die Bildpfade für diesen bestimmten Benutzer erhalten und sich die Ansicht/twing passieren (können Sie verwenden Array für diese)

+0

Danke. Ich hatte jedoch keine Probleme mit der allgemeinen Zugangskontrolle. Mein Problem war wirklich ein Front-End-Problem. Siehe meine Antwort für Details. Entschuldigung, wenn die Frage nicht so klar war. – user3440145

Verwandte Themen