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?
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.
… 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?
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.
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.
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:
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.
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?
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.
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.
ich weiß, das Thema ist schon älter. Bist Du damals zum Ziel gekommen? Wir haben jetzt hier dieselbe Anforderung.
Ich erinnere mich nicht mehr genau aber wenn ich mir den Thread so durchlese scheint das am Ende geklappt zu haben. Ich könnte mal am Wochenede schauen ob ich den Code dazu noch finde aber ob das in einer aktuellen Shopware noch funktioniert wage ich zu bezweifeln ;-/
… wenn es nicht zu viele Umstände macht, wäre das großartig!
Wenn’s nicht mehr läuft, dann ist das eben so. Vielleicht kann ich es modifizieren (würden es Dir dann modifiziert natürlich zur Verfügung stellen). Ansonsten muss ich mir anders helfen