# Backend Kundenliste beschränken

**URL:** <https://forum.shopware.com/t/backend-kundenliste-beschranken/46914>\
**Category:** Programmierung\
**Created:** [14. Juli 2017 um 08:00 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914 "2017-07-14T08:00:24Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [14. Juli 2017 um 08:00 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/1 "2017-07-14T08:00:24Z")

</div>

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

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.

---

<div class="post-metadata">

**Author:** ![derwunner](https://avatars.discourse-cdn.com/v4/letter/d/e5b9ba/32.png) [@derwunner](https://forum.shopware.com/u/derwunner)\
**Post date:** [14. Juli 2017 um 09:27 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/2 "2017-07-14T09:27:34Z")

</div>

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.

&nbsp;

&nbsp;

MFG

&nbsp;

derwunner

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [17. Juli 2017 um 10:15 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/3 "2017-07-17T10:15:07Z")

</div>

> [@derwunner schrieb:](https://forum.shopware.com/profile/25468/derwunner "derwunner")
> 
> &nbsp;… Auf das Event von der Ajax-Call Action abonnieren und dann das zurückgelieferte Ergebnis manipulieren.
> 
> &nbsp;

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. &nbsp;Hast du zufällig das richtige Event parat?

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [18. Juli 2017 um 13:20 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/4 "2017-07-18T13:20:53Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![derwunner](https://avatars.discourse-cdn.com/v4/letter/d/e5b9ba/32.png) [@derwunner](https://forum.shopware.com/u/derwunner)\
**Post date:** [18. Juli 2017 um 14:22 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/5 "2017-07-18T14:22:57Z")

</div>

> [@hbee schrieb:](https://forum.shopware.com/profile/1538/hbee "hbee")
> 
> 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.

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [18. Juli 2017 um 17:56 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/6 "2017-07-18T17:56:00Z")

</div>

ich kann jetzt über&nbsp;Shopware()-\>Auth()-\>getIdentity(); innherhalb von&nbsp;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&nbsp;Shopware\Models\Customer\Repository::getListQueryBuilder::after registriert und manipuliere hier den QueryBuilder.

Alles gut soweit.

&nbsp;

---

<div class="post-metadata">

**Author:** ![derwunner](https://avatars.discourse-cdn.com/v4/letter/d/e5b9ba/32.png) [@derwunner](https://forum.shopware.com/u/derwunner)\
**Post date:** [19. Juli 2017 um 06:44 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/7 "2017-07-19T06:44:00Z")

</div>

> [@hbee schrieb:](https://forum.shopware.com/profile/1538/hbee "hbee")
> 
> ich kann jetzt über&nbsp;Shopware()-\>Auth()-\>getIdentity(); innherhalb von&nbsp;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&nbsp;Shopware\Models\Customer\Repository::getListQueryBuilder::after registriert und manipuliere hier den QueryBuilder.
> 
> Alles gut soweit.
> 
> &nbsp;

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?

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [19. Juli 2017 um 07:24 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/8 "2017-07-19T07:24:30Z")

</div>

> [@derwunner schrieb:](https://forum.shopware.com/profile/25468/derwunner "derwunner")
> 
> 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.&nbsp;&nbsp;jetzt geht’s – vielleicht hatte ich auch einen tippfehler…

zu 2. ich habe mich jetzt zusätzlich auf&nbsp;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.

&nbsp;

---

<div class="post-metadata">

**Author:** ![cyncode](https://avatars.discourse-cdn.com/v4/letter/c/87869e/32.png) [@cyncode](https://forum.shopware.com/u/cyncode)\
**Post date:** [13. Februar 2020 um 15:03 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/9 "2020-02-13T15:03:30Z")

</div>

Hallo hbee,

ich weiß, das Thema ist schon älter. Bist Du damals zum Ziel gekommen? Wir haben jetzt hier dieselbe Anforderung.

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [13. Februar 2020 um 15:22 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/10 "2020-02-13T15:22:11Z")

</div>

> [@cyncode schrieb:](https://forum.shopware.com/profile/33213/cyncode "cyncode")
> 
> Hallo hbee,
> 
> 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 ;-/&nbsp;

---

<div class="post-metadata">

**Author:** ![cyncode](https://avatars.discourse-cdn.com/v4/letter/c/87869e/32.png) [@cyncode](https://forum.shopware.com/u/cyncode)\
**Post date:** [13. Februar 2020 um 17:05 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/11 "2020-02-13T17:05:56Z")

</div>

… 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 😉

---

<div class="post-metadata">

**Author:** ![hbee](https://avatars.discourse-cdn.com/v4/letter/h/f08c70/32.png) [@hbee](https://forum.shopware.com/u/hbee)\
**Post date:** [17. Februar 2020 um 10:00 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/12 "2020-02-17T10:00:51Z")

</div>

Hier mal mein Subscriber. vielleicht hilf dir das ja.

```
container = $container;

    }

    /**
     * @return array
     */
    public static function getSubscribedEvents()
    {
        return [
            'Enlight_Controller_Action_PreDispatch_Backend_Customer' => 'onPreDispatchCustomer',
            'Shopware\Models\Customer\Repository::getListQueryBuilder::after' => 'afterGetCustomerList',
            'Shopware\Models\Customer\Repository::getBackendListCountedBuilder::after' => 'afterGetBackendListCountedBuilder',
            'Shopware_Controllers_Backend_Customer::performOrderAction::after' => 'performOrder',
        ];
    }

    /**
     * @param \Enlight_Event_EventArgs $args
     *
     * @return bool
     */
    public function onPreDispatchCustomer(\Enlight_Event_EventArgs $args)
    {
        $identity = $this->container->get('Auth')->getIdentity();
        $this->roleId = $identity->roleID;
        $this->username = $identity->username;
        $this->vkgrp = $this->getAuthAttr('my_customer_vkgrp',$identity->id);
        return true;
    }

    /**
     * @param Enlight_Hook_HookArgs $args
     */
    public function performOrder(\Enlight_Hook_HookArgs $args){

        Shopware()->Session()->MyCustomerAd['AdminUsername'] = $this->username;

    }

    /**
     * @param \Enlight_Hook_HookArgs $arguments
     */
    public function afterGetCustomerList(\Enlight_Hook_HookArgs $arguments)
    {
        if($this->roleId == 4){
            //original builder
            $builder = $arguments->getReturn();
            $builder->leftjoin('customer.attribute','customerAttr');
            if(empty($this->vkgrp) || $this->vkgrp == ""){
                $builder->andWhere('customerAttr.my_customerVkgrp = ?99 OR customerAttr.my_customerVkgrp IS NULL');
            }else{
                $builder->andWhere('customerAttr.my_customerVkgrp = ?99');

            }
            $builder->setParameter(99, $this->vkgrp);

            $arguments->setReturn($builder);
        }
    }

    /**
     * @param \Enlight_Hook_HookArgs $arguments
     */
    public function afterGetBackendListCountedBuilder(\Enlight_Hook_HookArgs $arguments)
    {
        if($this->roleId == 4){
            //original builder
            $builder = $arguments->getReturn();
            $builder->leftjoin('customer.attribute','customerAttr');
            if(empty($this->vkgrp) || $this->vkgrp == ""){
                $builder->andWhere('customerAttr.my_customerVkgrp = ?99 OR customerAttr.my_customerVkgrp IS NULL');
            }else{
                $builder->andWhere('customerAttr.my_customerVkgrp = ?99');

            }
            $builder->setParameter(99, $this->vkgrp);

            $arguments->setReturn($builder);
        }
    }

    /**
     * @param $attr_name
     * @param $userID
     *
     * @return mixed
     */
    private function getAuthAttr($attr_name,$userID){

        $attr = Shopware()->Db()->fetchOne('SELECT '.$attr_name.' FROM s_core_auth_attributes WHERE authID = ?', array($userID));

        return $attr;

    }

}

```

&nbsp;

---

<div class="post-metadata">

**Author:** ![cyncode](https://avatars.discourse-cdn.com/v4/letter/c/87869e/32.png) [@cyncode](https://forum.shopware.com/u/cyncode)\
**Post date:** [24. Februar 2020 um 10:57 UTC](https://forum.shopware.com/t/backend-kundenliste-beschranken/46914/13 "2020-02-24T10:57:42Z")

</div>

Vielen Dank!!!  
Ich schaue mal, dass ich zurecht komme…
