我正在尝试禁用用户根据acl权限创建/编辑/删除产品的功能。我已正确构建权限并对其进行测试以确保它们正常工作。我可以检查一下这样的许可:
Mage::getSingleton('admin/session')->isAllowed('add_product');
这是我给add_product
acl的名字。我还正确创建了edit_product
和delete_product
acl。
我需要根据此权限停止保存或创建或删除产品。
这是我的xml片段,它调用给定事件的观察者:
<catalog_product_save_before>
<observers>
<mymodule>
<type>singleton</type>
<class>Namespace_Mymodule_Model_Observer</class>
<method>catalog_product_save_before</method>
</mymodule>
</observers>
</catalog_product_save_before>
我的观察员班:
class Namespace_Mymodule_Model_Observer {
public function catalog_product_save_before($observer) {
if( ! Mage::getSingleton('admin/session')->isAllowed('add_product') ) {
//stop creating the product
}
}
}
我的问题有两个问题。
首先,我应该使用哪些观察员来创建产品,删除产品和编辑产品?我相信上述事件仅在产品编辑之前触发。这是真的?我应该观察哪些其他事件?
其次,一旦我观察到正确的事件。我怎么告诉magento“不保存”或“跳过保存”?同样适用于创建和删除?图片上传怎么样?
我已经添加了几个块的更改,以删除基于这些acl的某些按钮。我想确保我停止所有动作,而不仅仅是我找到的按钮。
答案 0 :(得分:1)
如果您需要阻止对核心模型(即目录/产品)执行save方法,可以使用反射将“$ _dataSaveAllowed”设置为false:
public function catalogProductSaveBefore($observer)
{
try {
$product = $observer->getProduct();
$reflectionClass = new ReflectionClass('Mage_Catalog_Model_Product');
$reflectionProperty = $reflectionClass->getProperty('_dataSaveAllowed');
$reflectionProperty->setAccessible(true);
$reflectionProperty->setValue($product, false);
} catch (Exception $e) {
Mage::log($e->getMessage());
}
return $this;
}
答案 1 :(得分:0)