Angenommen, wir fügen der ACL einige neue Ressourcen hinzu:
<acl>
<resources>
<admin>
<children>
<catalog>
<children>
<search>
<children>
<import translate="title">
<title>Import</title>
</import>
<export translate="title">
<title>Export</title>
</export>
</children>
</search>
</children>
</catalog>
</children>
</admin>
</resources>
</acl>
Wir fügen dann Folgendes um eine Schaltfläche hinzu, die im SearchTerm-Raster angezeigt wird:
if (Mage::getSingleton('admin/session')->isAllowed('catalog/search/import')) {
$this->_addButton('import', array(
'label' => 'Import Search Terms',
'onclick' => "setLocation('".$this->getUrl('*/*/import')."')"
));
}
Wenn ich mich dann als Nicht-Administrator-Benutzer anmelde, hätte ich wirklich gedacht, dass das erwartete Verhalten keine Schaltfläche sichtbar ist, da ich der Benutzerrolle die Ressource nicht explizit zugewiesen habe. Wie sich jedoch herausstellt, isAllowed
scheint der Standardrückgabewert von true zu sein. Wenn Sie die Ressourcen für diese Rolle anzeigen, wird das Kontrollkästchen nicht aktiviert.
Ich kann das Problem beheben, indem ich durch jede Rolle klicke und auf Speichern klicke. Dies ist jedoch eine PITA, die insbesondere in Live- / Bühnen- / Entwicklungsumgebungen durchgeführt werden muss. Gibt es eine einfache Möglichkeit, diese Ressource automatisch über Code von jeder Rolle abzulehnen? Es macht mir nichts aus, bei Bedarf ein Migrationsskript hinzuzufügen. Ich habe mir kurz angesehen, was in derselben Aktion passiert. Vermutlich könnte ich dies tun, indem ich alle Rollen lade, sie durchlaufe und eine ähnliche Logik wie beim Mage_Admin_Model_Resource_Rules::saveRel
Einfügen der Zeilen in die Tabelle ausführe . Dieser Code scheint jedoch davon auszugehen, dass alle Ressourcen veröffentlicht sind. Um ihn direkt aufzurufen, müsste ich herausfinden, in welchem Format ich die Daten übergeben und möglicherweise auch vorhandene Ressourcen laden muss.
$session->isAllowed($session->getData('acl')->get('catalog/search/import')->getResourceId())