ACL im eigenen Plugin

Ich versuche einige Rechte über das Benutzerrechtesystem in meinem Plugin anzulegen. Leider sind meine gefunden Informationen sehr spärlich. Daher die Frage an die Community ob jemand mir einen Tipp geben kann wie ich das ACL korrekt implementiere. Soweit ich herausgefunden habe, kommt in den jeweiligen Controller eine initACL() in der die Rechte definiert sind. Diese Funktion soll automatisch von Shopware aufgerufen werden. Ich sehe meine neuen Rechte aber nicht in der dem Benutzrechte Formular. Was mache ich falsch?

Hallo, Füge mal diesen Aufruf in die install Methode deiner Bootstrap: Shopware()->Acl()->createResource(‘myplugin’, array(‘read’, ‘create’, ‘update’, ‘delete’), ‘My Plugin’, $this->getId());

1 „Gefällt mir“

Vielen Dank für die perfekte Antwort, hat funktioniert.

Du kannst jetzt auch in deinem Backend Plugin im Extjs z.B.: den Löschbutton usw. ausblenden

Wie meinst du das? Bin jetzt neugierig geworden. Zusatz zu mariofords Tipp. Man muss / sollte zudem die Resource beim deinstallieren wieder löschen, sonst gibt es bei einer erneuten Installation einen Fehler da die Resource bereits vorhanden ist. Das geht dann so: Shopware()-\>Acl()-\>deleteResource('myplugin');

Also mit dem löschen hatte wir Probleme, deshalb löschen wir die Einträgen selber: Also in der uninstall(): $sql = „SELECT id FROM s_core_acl_resources WHERE name = ?“; $resourceID = Shopware()->Db()->fetchOne($sql, array(‚myplugin‘)); $delete = ‚DELETE FROM s_core_acl_resources WHERE id = ?‘; Shopware()->Db()->query($delete, array($resourceID)); $delete = ‚DELETE FROM s_core_acl_privileges WHERE resourceID = ?‘; Shopware()->Db()->query($delete, array($resourceID)); $delete = ‚DELETE FROM s_core_acl_roles WHERE resourceID = ?‘; Shopware()->Db()->query($delete, array($resourceID)); Zum Ausblenden eines Buttons im Grid: /*{if {acl_is_allowed privilege=delete}}*/ { iconCls: ‚sprite-minus-circle-frame‘, action: ‚delete‘, cls: ‚delete‘, tooltip: ‚{s name=grid_delete_tooltip}Löschen{/s}‘, handler:function (view, rowIndex, colIndex, item) { me.fireEvent(‚deleteColumn‘, view, rowIndex, colIndex, item); } }, /*{/if}*/ Die Anweisung ist also: /*{if {acl_is_allowed privilege=delete}}*/

Danke erstmal für deine Infos. Ich finde die echt hilfreich und werde sicherlich das mit dem Löschen übernehmen. Sehr praktisch! Bei mir macht das deinstallieren keine Probleme, dafür kämpft man halt an anderer Stelle. Hab mein Plugin jetzt x mal auf 2 System getestet und es lief anstandslos. Trotzdem kann es ja dem einen oder anderen helfen. Mir hat es geholfen und noch zusätzlich Infos gebracht, die so nicht zu finden waren. Gruß Frank

Eine Frage hätte ich da noch… Ich versuche die Rechte im Controller abzufragn und abhängig davon den Button zu verstecken. Meine Buttons stecken in einem Array und irgendwie wirft die Zeile if({acl\_is\_allowed privilege=verifyItem}){ } Fehler. Jetzt ist meine Vermutung das der Controller nicht durch Smarty geparsed wird. Zudem zeigt mir phpstorm an das privilege einen : erwartet. Kann ich überhaupt die acl_is_allowed im Controller benutzen?

Das geht auch im Extjs Controller. Kannst dir ja mal das Banner Plugin anschauen. Dort fragt Shopware die Rechte im Controller ab. Finde ich aber nicht schön, da die Buttons trotzdem angezeigt werden. Es wird nur die Funktion nicht ausgeführt. /*{if {acl_is_allowed privilege=update}}*/ itemdblclick: me.onBannerClick, /* {/if} */ Denke auch immer an die korrekte Schreibweise. Also mit dem Slash und dem Sternchen. Schließendes /* {/if} */ nicht vergessen.

Ein 2tes Danke von meiner Seite. 1 Fehler die Schreibweise. Ich hatte fäschlicherweise gedacht die Kommentare währen vom Copy & Paste, also ohne Bedeutung. Das war ein Irrtum… Bei mir ist das nicht ganz so schlimmmit den Buttons, da meine Buttons per default nicht angezeigt werden, sondern nur unter gewissen Bedingungen. Bei mir ging es eher um da einblenden der Buttons. Dein Beitrag war echt hilfreich.