Tokens verwenden

Es gibt Autorisierungen, welche eine Person nicht gemeinsam mit einer anderen Person haben darf, obwohl sie die gleiche Rolle inne haben. Beispielsweise darf ein anonymer Shop-Anwender nicht Zugriff auf den Warenkorb eines anderen Shop-Anwenders erlangen. Zu diesem Zweck gibt es Tokens. Je Session wird ein Token erzeugt, dem automatisch die Rollen vom Typ „Token-Schema“ zugewiesen werden. Das geschieht beim betreten des Systems als anonymer Anwender.

Authentifizierung

Sobald sich ein anonymer Anwender im System anmeldet, wird der Token des anonymen Anwenders (vor Login) zu dem Token der authentifizierten Anwenders (nach Login) konsolidiert. Dadurch hat jeder Anwender immer nur einen Token und etwaige Performance-Probleme durch die Häufung von Tokens werden vermieden.

Abgrenzung der Rechte

Ein Token kann genau so wie eine Benutzergruppe mehrere Rollen subsummieren. Welche Rollen das sind wird in den Token-Schemata festgelegt. Im Gegensatz zur Benutzergruppe werden die Rechte nur dann gewährt, wenn der zu verarbeitende Datensatz und der Anwender den Token besitzen. Es reicht nicht aus, dem Datensatz die Rolle zuzuweisen, die der Token besitzt.

Automatische Zuweisung

Die Tokens eines Anwenders werden immer und automatisch allen Datensätzen zugewiesen, die der Anwender anlegt (anonym oder authentifiziert). Es muss mindestens ein aktives Token-Schema existieren. Um zu verhindern dass die Tokens automatisch zu einem bestimmten Entity zugewiesen werden, existiert das Event OnAddDatasetTokenEvent

Beispiel
<?php namespace Brandbox\App\PackageNamespace\PackageName\Lib\Subscriber {     use Brandbox\Framework\Brandbox\Role;     use Brandbox\Framework\Brandbox\Event;     class BrandboxRoleSubscriber extends Event\EventSubscriberAbstract     {      public const PRIORITY = 300;      private const NON_TOKEN_IDENTIFIER = [      'YourEntityIdentifier'      ];      public static function getSubscribedEvents(): array      {      return [      Role\Lib\Event\OnAddDatasetTokenEvent::NAME => [      ['onAddDatasetToken', self::PRIORITY]      ],      Role\Lib\Event\OnAddUserTokenEvent::NAME => [      ['onAddUserTokenEvent', self::PRIORITY]      ]      ];      }      public function onAddDatasetToken(Role\Lib\Event\OnAddDatasetTokenEvent $event): void         {             $isSuperAuthorized = $this                 ->getApplicationConfig()                 ->isSuperAuthorized()             ;             if ($isSuperAuthorized             || in_array($event->getIdentifier(), self::NON_TOKEN_IDENTIFIER)             ) {                 $event->setTokenIDs([]);                 $event->stopPropagation();             }         }         public function onAddUserTokenEvent(Role\Lib\Event\OnAddUserTokenEvent $event): void         {             $isSuperAuthorized = $this                 ->getApplicationConfig()                 ->isSuperAuthorized()             ;             if ($isSuperAuthorized) {                 $event->setTokenIDs([]);               $event->stopPropagation();             }       }     } }