Version: Edit on GitHub

Custom Permissions

When creating custom queries or creating other custom extensions to Datahub, it might be useful to add additional permissions to define access rules for certain data entities (like it is possible to define access for documents, assets, etc.).

Adding Custom Permissions

If you want to create custom permissions, you can create an event-listener for the event Pimcore\Bundle\DataHubBundle\ConfigEvents::SPECIAL_ENTITIES and add them as follows.

The EventListener adds a new Entity of type Pimcore\Bundle\DataHubBundle\Model\SpecialEntitySetting with the corresponding permissions it allows:

  • Read Possible: defines if read checkbox is available
  • Create Possible: defines if create checkbox is available
  • Update Possible: defines if update checkbox is available
  • Delete Possible: defines if delete checkbox is available
  • Read Allowed: define default value for read
  • Create Allowed: define default value for create
  • Update Allowed: define default value for update
  • Delete Allowed: define default value for delete

Sample Implementation


use Pimcore\Bundle\DataHubBundle\ConfigEvents;
use Pimcore\Bundle\DataHubBundle\Event\Config\SpecialEntitiesEvent;
use Pimcore\Bundle\DataHubBundle\Model\SpecialEntitySetting;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;

class GraphQlCustomListener implements EventSubscriberInterface
{
    public static function getSubscribedEvents()
    {
        return [
            ConfigEvents::SPECIAL_ENTITIES => 'specialEntities'
        ];
    }

    public function specialEntities(SpecialEntitiesEvent $event)
    {
        $custom = new SpecialEntitySetting(
            'custom',
            true,
            true,
            true,
            false,
            $event->getConfig()['schema']['specialEntities']['custom']['read'] ?? false,
            $event->getConfig()['schema']['specialEntities']['custom']['crate'] ?? false,
            $event->getConfig()['schema']['specialEntities']['custom']['update'] ?? false,
            $event->getConfig()['schema']['specialEntities']['custom']['delete'] ?? false
        );

        $event->addSpecialSetting($custom);
    }
}