Magento Produktbewertungen – Mage_Review – UPDATE

Posted by Falk Opitz | Posted in Magento Codeschnipsel, Magento Module, Magento Sicherheit | Posted on 28-08-2013

In einem meiner Magento-Projekte darf ich die Produktbewertungen (reiner Magento Standard) aktivieren/implementieren.

Bei kleineren Tests fiel mir folgendes auf:

Ausgangs-Situation:
Ist man als Customer eingeloggt und hat eine Produktbewertung geschrieben, so kann man diese auch im Kundenbereich sehen. Die entsprechende URL lautet: [DOMAIN]/review/customer/view/id/[ID]/

Probleme:
Ändert man die [ID], so kann man JEDE Produktbewertung einsehen, sofern diese auch tatsächlich existiert!
– Es spielt keine Rolle, welchem StoreView eine Produktbewertung zugeordnet ist.
– Es spielt keine Rolle, welchen Status eine Produktbewertung hat.

Diese Problematik existiert mit Magento-Versionen 1.4.1.1 bis 1.7.0.2 – kann aber auch noch ältere Versionen betreffen.

Folgeprobleme:
– Es lässt sich nachvollziehen, wie viele Produktbewertungen ein Mitbewerber (pro Tag/Woche/Monat) erhält.
– Mit einem Crawler kann man sich recht einfach sämtliche Produktbewertungen eines beliebigen Magento-Shops ziehen.
– …

Lösung:
Mit folgendem Code wird sichergestellt, dass ein Kunde nur seine eigenen Produktbewertungen im Magento Kundenbereich einsehen kann:

FalkOpitz_FixedReviews.xml:

<FalkOpitz_FixedReviews>
    <active>true</active>
    <codepool>local</codepool>
</FalkOpitz_FixedReviews>

config.xml:

<?xml version="1.0"?>
<config>
    <modules>
        <FalkOpitz_FixedReviews>
            <version>0.1.0</version>
        </FalkOpitz_FixedReviews>
    </modules>
    <global>
        <blocks>
            <review>
                <rewrite>
                    <customer_view>FalkOpitz_FixedReviews_Block_Customer_View</customer_view>
                </rewrite>
            </review>
        </blocks>
    </global>
</config>

View.php:

<?php

class FalkOpitz_FixedReviews_Block_Customer_View extends Mage_Review_Block_Customer_View {
    public function getReviewData() {
        $reviewData = parent::getReviewData();

        if($reviewData->getCustomerId() == Mage::getModel(‘customer/session’)->getCustomerId()) {
            return $reviewData;
        }

        return Mage::getModel(‘review/review’);
    }
}

UPDATE vom 02.09.2013:
Mit URLs wie [DOMAIN]/review/product/view/id/[ID]/ lassen sich auch ohne Verwendung eines Benutzerkontos die Produktbewertungen automatisiert auslesen.

Der entsprechende Code zum Unterbingen der Anzeige folgt in den nächsten Stunden/Tagen…

Comments:

Write a Comment

You must be logged in to post a comment.