如何使用观察者停止产品创建/保存/删除?

时间:2015-04-30 21:40:55

标签: magento events product

我正在尝试禁用用户根据acl权限创建/编辑/删除产品的功能。我已正确构建权限并对其进行测试以确保它们正常工作。我可以检查一下这样的许可:

Mage::getSingleton('admin/session')->isAllowed('add_product');

这是我给add_product acl的名字。我还正确创建了edit_productdelete_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的某些按钮。我想确保我停止所有动作,而不仅仅是我找到的按钮。

2 个答案:

答案 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)

我认为您可以尝试以下文章中描述的代码段

http://blog.goods-pro.com/2137/create-a-read-only-privilege-magento-admin-panel-user/

相关问题