hbeehbee MitgliedKommentare: 672 Danke erhalten: 73 Mitglied seit: Juni 2011

hallo, ich möchte gern bestimten Backendbenutzern bzw. einer Benutzergruppe nur bestimmte Kunden in der Kundenliste zeigen. 

Sowohl Backendbenutzer als auch Kunden bekommen ein Freitextfeld. Es dürfen dann nur die Kunden angeziegt werden die den gleichen Wert im Freitextfeld haben.

User.freitextfeld_A == Kunde.freitextfeld_A

Das ist mit den normalen Berechtigungen nicht möglich oder? Hat hier jemand sowas schon mal umgesetzt bzw. gibt es ein Plugin dafür?

ich denke am Einfachsten ist es vielleicht wenn man das über ein lightweight-plugin umsetzt. kann ich hier auf die freitextfelder des aktuellen Users zugreifen?

vielen Dank.

Antworten

  • derwunnerderwunner MitgliedKommentare: 172 Danke erhalten: 32 Mitglied seit: 2. Januar

    Hallo,

    naja, Du könntest neue Privilegien anlegen, in denen hinterlegst Du dann, welche Kunden geshen werden dürfen. Also quasi pro Backend-Benutzergruppe ein Privileg indem Du jeweils die sichtbaren Kunden definierst.

    Und dann musst Du halt noch dafür sorgen, dass das in der Kundenansicht auch so der Fall ist. Also musst wohl im Ajax Call von der Backend Kundenansicht-Anfrage das zurückgelieferte Ergebnis einschränken. Das selbe müsste übrigends auch mit Freitextfeldern gehen. Selbes Prinzip: Auf das Event von der Ajax-Call Action abonnieren und dann das zurückgelieferte Ergebnis manipulieren.

     

     

    MFG

     

    derwunner

  • hbeehbee MitgliedKommentare: 672 Danke erhalten: 73 Mitglied seit: Juni 2011

     ... Auf das Event von der Ajax-Call Action abonnieren und dann das zurückgelieferte Ergebnis manipulieren.

     

    so hatte ich mir das auch vorgestellt. jeder Backend-Benutzer einer bestimten Gruppe bekommt ein Freitextfeld. Das selbe Freitextfeld bekommen dann die Shopkunden. Der Backend-Benutzer darf den Kunden dann nur sehen, wenn die beiden Freitextfelder übereinstimmen.  Hast du zufällig das richtige Event parat?

  • hbeehbee MitgliedKommentare: 672 Danke erhalten: 73 Mitglied seit: Juni 2011

    ok, ich habe mir hierzu jetzt einen Subscriber registriet und manipuliere dort den QueryBuilder. Das funktoniert soweit gut.

    Wir komme ich jetzt aber an den Backend-User innerhalb meines Subscribers?

    Shopware()->Container()->get('Auth')->getIdentity() funktioniert nicht.

    Danke.

  • derwunnerderwunner MitgliedKommentare: 172 Danke erhalten: 32 Mitglied seit: 2. Januar

    ok, ich habe mir hierzu jetzt einen Subscriber registriet und manipuliere dort den QueryBuilder. Das funktoniert soweit gut.

    Wir komme ich jetzt aber an den Backend-User innerhalb meines Subscribers?

    Shopware()->Container()->get('Auth')->getIdentity() funktioniert nicht.

    Danke.

    So auf diese Art und Weise gar nicht, weil das ein Doctrine Event ist. Du brauchst ein Frontend-Dispatch Event dafür. Also nimm am besten wie bereits erwähnt die Ajax Action dafür, die die Listing Daten für die Kundenauflistung zurück gibt. Parat habe ich die nicht, die lässt sich aber leicht finden: Browser Debugger auf, zum Netzwerk-Tab wechseln, Filter auf XHR stellen. Kurz bevor du auf Kunden -> Kunden klickst im Backend leerst Du nochmal den Netzwerk Tab (clear Button oben links irgendwo meistens). Und dann sollte es einer der ersten XHR Anfragen sein. Die die am logischsten nach Auflisting klingt ist es dann.

  • hbeehbee MitgliedKommentare: 672 Danke erhalten: 73 Mitglied seit: Juni 2011

    ich kann jetzt über Shopware()->Auth()->getIdentity(); innherhalb von Enlight_Controller_Action_PreDispatch_Backend_Customer darauf zugreifen. Das funktioniert.

    Wenn ich die Daten vom AjaxCall manipuliere, fehlt mir das paging. Wenn ich also mehr als 20 Einträge habe, da dann aber 10 rausfiltere, kann ich nicht mehr blättern.

    Ich habe mich jetzt auf Shopware\Models\Customer\Repository::getListQueryBuilder::after registriert und manipuliere hier den QueryBuilder.

    Alles gut soweit.

     

  • derwunnerderwunner MitgliedKommentare: 172 Danke erhalten: 32 Mitglied seit: 2. Januar

    ich kann jetzt über Shopware()->Auth()->getIdentity(); innherhalb von Enlight_Controller_Action_PreDispatch_Backend_Customer darauf zugreifen. Das funktioniert.

    Wenn ich die Daten vom AjaxCall manipuliere, fehlt mir das paging. Wenn ich also mehr als 20 Einträge habe, da dann aber 10 rausfiltere, kann ich nicht mehr blättern.

    Ich habe mich jetzt auf Shopware\Models\Customer\Repository::getListQueryBuilder::after registriert und manipuliere hier den QueryBuilder.

    Alles gut soweit.

     

    Ok, ein paar Anmerkungen noch:

    1. Benutze doch bitte den Container und hole dir das Auth Objekt als Service. Die alten Plugin Zeiten sind so allmälich vorbei und wer weiß, wie lange die alte Plugin Struktur noch unterstützt wird.

    2. Um das Problem mit dem Paging zu lösen: Meinst Du, es reicht schon, sich auf das Doctrine Event zu abonnieren? Müsstest du nicht eventuell auch das ExtJS Model überschreiben?

  • hbeehbee MitgliedKommentare: 672 Danke erhalten: 73 Mitglied seit: Juni 2011

    1. Benutze doch bitte den Container und hole dir das Auth Objekt als Service. Die alten Plugin Zeiten sind so allmälich vorbei und wer weiß, wie lange die alte Plugin Struktur noch unterstützt wird.

    2. Um das Problem mit dem Paging zu lösen: Meinst Du, es reicht schon, sich auf das Doctrine Event zu abonnieren? Müsstest du nicht eventuell auch das ExtJS Model überschreiben?

    zu 1. das hatte ich Anfangs auch so. Hat aus irgendwelchen Gründen nicht funktioniert.  jetzt geht's – vielleicht hatte ich auch einen tippfehler...

    zu 2. ich habe mich jetzt zusätzlich auf Shopware\Models\Customer\Repository::getBackendListCountedBuilder::after registriert und manupuliere hier ebenfalls den QueryBuilder. Damit habe ich auch die korrekte Seitenanzahl und das Paging funktioniert korrekt. Ich Denke es ist nciht nötig das ExtJs zu überschreiben da ich ja schon das Sql entsprechend bearbeitet habe.

    Vielen Dank.

     

Anmelden oder Registrieren, um zu kommentieren.