Lieber Moritz,
zunächst einmal vielen Dank dass du dir die Zeit nimmst und versuchst zu helfen!
Also ich habe das in der Datenbank überprüft. In der s_core_menü steht für den Eintrag mit dem Namen “Customer Streams” in der Spalte “Controller” der Wert: Customer.
Meine Ressource im Backend bzw. in der s_core_acl_resources heißt jedoch: customerstream
Ich bin bei der Ermittlung des Controllers wie hier beschrieben vorgegangen:
Demnach stimmen die beiden Werte wie von dir beschrieben zwar NICHT überein, aber aus meiner Sicht dürfte dies aber dennoch korrekt sein, denn:
Ich kann in der s_core_acl_resources keinen weiteren Eintrag mit dem Namen “customer” anlegen, denn den gibt es ja bereits - Das würde sonst zu einem fehler führen.
Im Backend habe ich das Recht der Ressource NICHT angehakt, read (darunter) ebenso nicht. Wenn ich dies mache (die Ressource nicht zuweisen, so wie in der Doku (link) auch beschrieben) dann erhalte ich im Backend nach dem Login bzw. spätestens beim Klick auf “Kunden” noch weitere Probleme und zwar derart, dass ich dann eine Fehlermeldung bekomme und das Plugin garnicht erst öffnen kann.
Die Fehlermeldung wird dann vom Modul “Shopware.apps” geworfen mit der Meldung:
Permission denied in engine/Shopware/Plugins/Default/Backend/Auth/Bootstrap.php on line 254
Stack trace:
#0 engine/Shopware/Plugins/Default/Backend/Auth/Bootstrap.php(207): Shopware_Plugins_Backend_Auth_Bootstrap->checkAuth()
#1 engine/Library/Enlight/Event/Handler/Plugin.php(149): Shopware_Plugins_Backend_Auth_Bootstrap->onPreDispatchBackend(Object(Enlight_Controller_ActionEventArgs))
#2 engine/Library/Enlight/Event/EventManager.php(220): Enlight_Event_Handler_Plugin->execute(Object(Enlight_Controller_ActionEventArgs))
#3 engine/Library/Enlight/Controller/Action.php(171): Enlight_Event_EventManager->notify('Enlight_Control...', Object(Enlight_Controller_ActionEventArgs))
#4 engine/Library/Enlight/Controller/Dispatcher/Default.php(549): Enlight_Controller_Action->dispatch('indexAction')
#5 engine/Library/Enlight/Controller/Front.php(222): Enlight_Controller_Dispatcher_Default->dispatch(Object(Enlight_Controller_Request_RequestHttp), Object(Enlight_Controller_Response_ResponseHttp))
#6 engine/Shopware/Kernel.php(215): Enlight_Controller_Front->dispatch()
#7 vendor/symfony/http-kernel/HttpCache/HttpCache.php(486): Shopware\Kernel->handle(Object(Symfony\Component\HttpFoundation\Request), 1, true)
#8 engine/Shopware/Components/HttpCache/AppCache.php(268): Symfony\Component\HttpKernel\HttpCache\HttpCache->forward(Object(Symfony\Component\HttpFoundation\Request), true, NULL)
#9 vendor/symfony/http-kernel/HttpCache/HttpCache.php(253): Shopware\Components\HttpCache\AppCache->forward(Object(Symfony\Component\HttpFoundation\Request), true)
#10 engine/Shopware/Components/HttpCache/AppCache.php(105): Symfony\Component\HttpKernel\HttpCache\HttpCache->pass(Object(Symfony\Component\HttpFoundation\Request), true)
#11 shopware.php(122): Shopware\Components\HttpCache\AppCache->handle(Object(Symfony\Component\HttpFoundation\Request))
#12 {main}
Diese Meldung ist ja auch durchaus korrekt bzw. Logisch, da ich ja das Recht zur Ressource komplett entfernt habe.
Was ich aber eigentlich an dieser Stelle erwarte ist, dass der Nutzer (mit dem fehlenden Recht für den Reiter “Customer Streams”) durchaus das Plugin “Kunden” öffnen kann, dieser dann aber nur noch den Reiter “Kundenübersicht” ohne den Reiter “Customer Streams” angezeigt bekommt.
**Im Plugin (**shopware/window.js at 56df57575909854d2dec7fcba07500e27a3361ee · shopware/shopware · GitHub) wird nach meinem Verständniss ja genau das auch abgefragt, aber es funktioniert einfach nicht.
Auch an anderen Stellen klappt es nicht, dazu noch zwei Beispiele:
1 Beispiel: Ich habe ein eigenes Privileg “showimagetab” unter der resource “article” angelegt, welches ich dem nutzer auch NICHT zugeweisen habe.
Ziel ist es, den Tab Bilder im Dialog Artikel auszublenden. Hierzu habe ich das ExtJs Template “Shopware.apps.Article.view.detail.Window” mittels override überschrieben (das klappt soweit auch), allerdings klappt die hierin enthaltene nachfolgende abfrage ebensowenig wie das core beispiel (s.o):
/*{if {acl_is_allowed resource=article privilege=showimagetab}}*/
tabItemsCustom.push(me.imageTab);
/*{/if}*/
Beispiel 2: Im Backend gibt es den Menüpunkt “Artikel” > “Product-Streams”. Diesen Untermenüpunkt “Product-Streams” würde ich ebenfalls gerne für eine bestimmte Rolle ausblenden. Der Controller hierzu lautet “ProductStream” -> lowercased ist dieser entsprechend als resource hinterlegt. Wenn ich diese Resource der entsprechenden Rolle nicht zuweise (haken setze) dann erhalte ich direkt beim Laden des Backends (nach dem Login) ebenfalls Fehlermeldungen (Persmisson denied), da anscheinend beim Aufruf des Backends der Controller “Product Streams” immer im Hintergrund auch schon geladen wird (werden muss). Schade. ich würde hier einfach gerne den Menüpunkt ausblenden, der Controller darf meinetwegen ja weiter geladen werden, aber so funktioniert es auch hier nicht.
Wichtiger ist mir aber eigentlich das Smarty / acl_is_allowed Problem bzw. die Frage, warum das nicht greifen will bzw. immer true zurückliefert, in den genannten Beispielfällen…
Danke für jegliche weitere Unterstützung!