# REST API Zugriff auf Kategorien beschränken

**URL:** https://forum.shopware.com/t/rest-api-zugriff-auf-kategorien-beschranken/44746
**Category:** Programmierung
**Created:** [23. März 2017 um 12:25 UTC](https://forum.shopware.com/t/rest-api-zugriff-auf-kategorien-beschranken/44746 "2017-03-23T12:25:04Z")
**Posts on this page:** 2
**Page:** 1

<div class="post-metadata">

### Author: ![LukasFranz](https://avatars.discourse-cdn.com/v4/letter/l/ad7895/32.png) [@LukasFranz](https://forum.shopware.com/u/LukasFranz)
#### Post date: [23. März 2017 um 12:25 UTC](https://forum.shopware.com/t/rest-api-zugriff-auf-kategorien-beschranken/44746/1 "2017-03-23T12:25:04Z")

</div>

Hallo zusammen,

beim hinzufügen von Kategorien über die REST API, würde ich gerne den Zugriff auf diese nur bestimmten Kundengruppen gewähren.  
In der Dokumentation steht beim HTTP-GET von Kategorien das Attribut „customerGroups“ mit bei und es wird auch übertragen, wenn man es aufruf. Beim HTTP-PUT/POST wird es leider nicht mit aufgeführt.

Ich habe es trotzdem mal probiert:

```
$newCategory = array(
            "id" => 1337,
            "active" => 1,
            "name" => "Name",
            "parentId" => 3,
            "metaTitle" => "Title",
            "metaKeywords" => "Keywords",
            "metaDescription" => "Description",
            "cmsText" => "Testtext",
            "cmsHeadline" => "Testheadling",
            "media" => array(),
            "position" => "1",
            "template" => "",
            "customerGroups" => array(
                array("id" => 1)
            )
);

ApiClient::GetClient()->post("categories", $newCategory);

```

Kriege dabei aber folgenden Fehler im appache error.log:

> {„success“:false,„message“:„Errormesage: Expected value of type \„Doctrine\\Common\\Collections\\Collection|array\“ for association field \„Shopware\\Models\\Category\\Category#$customerGroups\“, got \„array\“ instead.“}

Weiß jemand hier weiter, oder andere Möglichkeiten, wie dies mit der REST API machbar ist?  
Alternativ&nbsp;könnte man die Werte direkt in der Datenbank per SQL zu setzen.&nbsp;Da aber nicht sichergestellt ist, dass die Datenbankstrukur über Updates hinweg gleich bleibt, möchte ich das am liebsten vermeiden.  
Vielen Dank im Voraus!

Beste Grüße,  
Lukas

---

<div class="post-metadata">

### Author: ![MrMDeluxe](https://avatars.discourse-cdn.com/v4/letter/m/4da419/32.png) [@MrMDeluxe](https://forum.shopware.com/u/MrMDeluxe)
#### Post date: [27. März 2017 um 13:10 UTC](https://forum.shopware.com/t/rest-api-zugriff-auf-kategorien-beschranken/44746/2 "2017-03-27T13:10:32Z")

</div>

Hallo Lukas,

deine Angabe von

&nbsp;

> „customerGroups“ =\> array(  
> array(„id“ =\> 1)  
> )

entspricht nicht dem Typ, den das Category Model hier erwartet.

Das Model verlangt hier ein Array an CustomerGroup Entities.

Shopware ermittelt diese Entities anhand der Post Daten leider nur im Categories Backend Controller.

Wenn Du die Kundengruppen Einschränkung auch via API setzen willst, reicht hier ein kleines Plugin,

welches sich auf den PreDispatch des Category API Controllers registriert und folgenden Handler ausführt:

&nbsp;

```
getSubject()->Request()->getPost();
        foreach ($data['customerGroups'] as $customerGroupData) {
            if (!empty($customerGroupData['id'])) {
                $model = Shopware()->Models()->find('Shopware\Models\Customer\Group', $customerGroupData['id']);
                $customerGroups[] = $model;
            }
        }
        $data['customerGroups']=$customerGroups;
        $args->getSubject()->Request()->setPost($data);
    }

```

&nbsp;
