ACL im Detail: granulare Berechtigungen für Grid, Formular und Löschen getrennt vergeben
ACL im Detail: granulare Berechtigungen für Grid, Formular und Löschen getrennt vergeben
~9 Min. Lesezeit Zuletzt aktualisiert am 9. August 2026
Seit Kapitel 14 nutzt das Testimonial-Modul einen einzelnen ACL-Knoten Mironsoft_Testimonial::testimonial für alles - Grid, Formular, Löschen. Kapitel 17 hat mit Mironsoft_Testimonial::delete bereits vorgegriffen. Dieses Kapitel zieht die vollständige, granulare ACL-Struktur nach, die Kapitel 3 als Ausblick angekündigt hat.
Warum ein einziger Knoten nicht reicht
In der Praxis gibt es häufig Rollen, die Kundenstimmen ansehen, aber nicht löschen dürfen sollen - ein Support-Mitarbeiter zum Beispiel, der eingereichte Stimmen sichten, aber nicht endgültig entfernen darf. Mit einem einzigen ACL-Knoten ist diese Trennung technisch unmöglich: Wer Zugriff hat, hat Zugriff auf alles, was an diesem Knoten hängt.
Die vollständige ACL-Baumstruktur
<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
<acl>
<resources>
<resource id="Magento_Backend::admin">
<resource id="Magento_Backend::content">
<resource id="Mironsoft_Testimonial::testimonial"
title="Testimonials" sortOrder="50">
<resource id="Mironsoft_Testimonial::save"
title="Create/Edit Testimonials" sortOrder="10"/>
<resource id="Mironsoft_Testimonial::delete"
title="Delete Testimonials" sortOrder="20"/>
</resource>
</resource>
</resource>
</resources>
</acl>
</config>::testimonial bleibt der oberste Knoten (Menüpunkt und Grid-Ansicht), ::save und ::delete hängen darunter als eigene Kind-Ressourcen. Wichtig ist die Erinnerung aus Kapitel 3: Wer Zugriff auf ::testimonial hat, sieht damit automatisch den Menüpunkt und den Grid - ::save/::delete steuern zusätzlich, ob Formular und Löschen erreichbar sind, nicht anstelle von ::testimonial.
Controller auf die passende Ressource mappen
Index(Grid),Edit,Upload- lesend, daherMironsoft_Testimonial::testimonial.Save,InlineEdit,Duplicate- schreibend, daherMironsoft_Testimonial::save.Delete,MassDelete- destruktiv, daherMironsoft_Testimonial::delete.MassStatus- inhaltlich eine Änderung, daher ebenfallsMironsoft_Testimonial::save, nicht::delete.
Achtung: Ein einfacher, aber folgenschwerer Fehler: Upload (Kapitel 16) sollte auf ::save zeigen, nicht auf ::testimonial - andernfalls könnte eine Rolle mit reinem Leserecht trotzdem Dateien auf den Server hochladen, weil der Upload-Endpunkt technisch nichts mit dem eigentlichen Speichern zu tun hat und leicht übersehen wird.
ACL-Vererbung noch einmal konkret
Wie in Kapitel 3 erwähnt, vererben sich Rechte nach unten: Eine Rolle mit Zugriff auf Magento_Backend::content hat automatisch auch Zugriff auf Mironsoft_Testimonial::testimonial und alle seine Kinder, selbst ohne expliziten Haken bei "Testimonials" im Rollen-Editor. Wer eine eingeschränkte Rolle bauen will, darf also nicht bei einem übergeordneten Knoten pauschal Vollzugriff vergeben, sondern muss gezielt einzelne Blätter des Baums aktivieren.
ACL in Tests und Review prüfen
Tipp: Ein pragmatischer Test nach jeder ACL-Änderung: eine neue Testrolle mit genau einer der drei Ressourcen anlegen, einen Testbenutzer zuweisen und im Adminbereich gezielt ausprobieren, ob genau die erwarteten (und nur die erwarteten) Aktionen möglich sind. ACL-Fehler fallen im normalen Entwickler-Alltag mit Administrator-Rolle nicht auf, weil diese Rolle ohnehin alles darf.
Mit dieser granularen Struktur ist das Testimonial-Modul bereit für unterschiedliche Rollen im Team - Kapitel 26 wechselt jetzt zu konkretem Troubleshooting.