从Magento网站限制中排除页面

时间:2014-04-22 23:44:19

标签: magento

我们有几个magento网站,其中一些我们想打开网站限制,所以只有登录的客户才能查看。这似乎很有效,除了我们有自定义页面,我们希望用户无需登录即可访问。目前,如果我们打开访问限制,它会将登录页面和密码重置页面之外的所有页面重定向到登录页面。

有谁知道如何排除其他网页被重定向到登录页面?我认为这将是一个布局xml设置,但我似乎无法弄明白或在其上找到任何东西。

Magento Enterprise版本1.12.02

2 个答案:

答案 0 :(得分:2)

哇,这个问题非常有效,相当陈旧,在Google搜索结果中排名靠前,但却没有一个好的答案。所以这里有一个。

从限制中排除页面的正确方法是将它们添加到Enterprise_WebsiteRestriction模块配置下的generic页面列表中。

特别参见app/code/core/Enterprise/WebsiteRestriction/etx/config.xmlconfig/frontend/enterprise/websiterestriction部分。无论设置什么限制级别,始终都可以访问full_action_names/generic下的页面。当限制模式设置为“登录和注册”时,full_action_names/register中的人仍然可以访问 - 即,它们可用于新的注册。

这些部分下的值是完整的操作名称(即<module>_<controller>_<action>),例如要为每个人启用联系表单,您需要将contacts_index_index添加到generic列表。

请注意,核心代码池中的编辑文件存在严重缺陷,因此要实现此目的,最好创建自己的模块并添加配置部分。

它应该看起来像这样(记得在app/etc/modules中启用此模块):

<?xml version="1.0"?> <config> <modules> <Emki_WebsiteUnrestrict> <version>0.1.0</version> </Emki_WebsiteUnrestrict> </modules> <frontend> <enterprise> <websiterestriction> <full_action_names> <generic> <contacts_index_index /> </generic> </full_action_names> </websiterestriction> </enterprise> </frontend> </config>

答案 1 :(得分:0)

尼克,这个功能有几个过程...

步骤1:您可以从控制器使用调度事件。

 /**
     * Retrieve customer session model object
     *
     * @return Mage_Customer_Model_Session
     */
    protected function _getSession()
    {
        return Mage::getSingleton('customer/session');
    }
 public function preDispatch()
    {
        // a brute-force protection here would be nice

        parent::preDispatch();

        if (!$this->getRequest()->isDispatched()) {
            return;
        }

        $action = $this->getRequest()->getActionName();
/* put all action of this controllers  for check ,if any actions of list is exit then redirect to  login page*/
        $openActions = array(
            'index',
            'post',
            'autoy',
            'confirmation'
        );
        $pattern = '/^(' . implode('|', $openActions) . ')/i';

        if (!preg_match($pattern, $action)) {
            if (!$this->_getSession()->authenticate($this)) {
                $this->setFlag('', 'no-dispatch', true);
            }
        } else {
            $this->_getSession()->setNoReferer(true);
        }
    }

    /**
     * Action postdispatch
     *
     * Remove No-referer flag from customer session after each action
     */
    public function postDispatch()
    {
        parent::postDispatch();
        $this->_getSession()->unsNoReferer(false);
    }

其他的事情是使用观察者