ACL角色资源默认
假设我们像这样向ACL添加了一些新资源: <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> 然后,我们在SearchTerm网格中出现的按钮周围添加以下内容: if (Mage::getSingleton('admin/session')->isAllowed('catalog/search/import')) { $this->_addButton('import', array( 'label' => 'Import Search Terms', 'onclick' => "setLocation('".$this->getUrl('*/*/import')."')" )); } 如果我以非管理员用户身份登录,我真的会以为预期的行为是看不到按钮的,因为我没有明确为用户角色分配资源。事实证明,默认的返回值isAllowed似乎为true。更复杂的是,当您查看该角色的资源时,该复选框将不会被打勾。 我可以通过单击每个角色并单击保存来解决“问题”,但这是PITA,尤其是在现场/舞台/开发环境中。有没有简单的方法可以通过代码自动拒绝每个角色的资源?如果需要,我不介意添加迁移脚本。我快速查看了同一动作会发生什么。大概可以做到这一点,方法是加载所有角色,循环遍历所有角色,并执行类似的逻辑以Mage_Admin_Model_Resource_Rules::saveRel将行插入表中。但是这段代码似乎假定所有资源都已发布,这意味着要直接调用它,我需要确定需要哪种格式将数据传递给它并可能加载现有资源。