Katakanlah kita menambahkan beberapa sumber daya baru ke ACL seperti:
<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>
Kami kemudian menambahkan berikut ini di sekitar tombol yang muncul di kotak SearchTerm:
if (Mage::getSingleton('admin/session')->isAllowed('catalog/search/import')) {
$this->_addButton('import', array(
'label' => 'Import Search Terms',
'onclick' => "setLocation('".$this->getUrl('*/*/import')."')"
));
}
Jika saya kemudian login sebagai pengguna non-admin, saya benar-benar akan berpikir bahwa perilaku yang diharapkan tidak akan ada tombol yang terlihat, karena saya belum secara eksplisit memberikan peran sumber daya kepada pengguna. Namun ternyata, nilai pengembalian default isAllowed
tampaknya benar. Untuk memperumit masalah, ketika Anda pergi dan melihat sumber daya untuk peran itu, kotak centang tidak akan muncul dicentang.
Saya dapat menyelesaikan 'masalah' dengan mengklik melalui setiap peran dan mengklik simpan, tetapi ini adalah PITA yang harus dilakukan terutama di seluruh lingkungan live / stage / dev. Apakah ada cara mudah untuk secara otomatis menolak sumber daya ini dari setiap peran melalui kode? Saya tidak keberatan menambahkan skrip migrasi jika diperlukan. Saya melihat sekilas apa yang terjadi dalam tindakan yang sama. Agaknya, saya bisa melakukan ini dengan memuat semua peran, mengulanginya dan melakukan logika yang sama untuk Mage_Admin_Model_Resource_Rules::saveRel
memasukkan baris ke dalam tabel. Tetapi kode ini tampaknya mengasumsikan bahwa semua sumber daya diposting, yang artinya untuk menjalankannya secara langsung, saya perlu mencari tahu format apa yang saya perlukan untuk menyampaikan data dan mungkin memuat sumber daya yang ada juga.
$session->isAllowed($session->getData('acl')->get('catalog/search/import')->getResourceId())