Zum Inhalt

Rollen und Berechtigungen im SDK

Operator-Kennungen auflösen und aus ihnen ableiten, welche Schritte der angemeldete Benutzer an einem Dokument ausführen darf.

Die fachlichen Hintergründe stehen in der Anleitung Rollen.

Operator als Identitäts-Konzept

Jede Partei im Dokument ist ein WasteOperatorType mit zwei Pflichtangaben: PartyUuid (technische Kennung) und OperatorInternalId (Kennung im DiWaSS-Operator-Verzeichnis, xs:long). Ein Name genügt nicht — die Kennung musst du vorher auflösen:

// EORI → matches in the DiWaSS operator directory (a list, not a single match)
var hits = await client.DiwassApi.OperatorApi.FindOperatorForEori(eori);

// own operator IDs of the logged-in account
IReadOnlyList<long> mine = await client.MyAccount.GetOwnDiwassOperatorIds();

Berechtigungen im SDK

Das SDK bringt eine rollenbasierte Vorprüfung mit. Sie ist ein Pre-Check für Oberflächen, keine Autorisierung — entschieden wird serverseitig.

Baustein Namespace Zweck
Role Zedal.Sdk.Apis.Diwass.Permissions die sechs Rollen
PermissionMatrix Zedal.Sdk.Apis.Diwass.Permissions darf diese Rolle diesen Vorgang grundsätzlich auslösen?
PermissionMatrixInference Zedal.Sdk.Apis.Diwass.Permissions welche Rollen hält eine Operator-Kennung in diesem Dokument?
DiwassIntents Infotech.Zedal.Documents.V1.Zewass.V1 die Vorgangsarten als Enum — auch der Inhalt von handler.FollowupIntents
// derive roles from the document and the operator ID
ISet<Role> roles = PermissionMatrixInference.InferRoles(operatorId, handler.Notification);

// role-based
bool allowed = PermissionMatrix.CanPerform(Role.Notifier, DiwassIntents.CreateSubmission);

// intersection of "allowed by role" and "allowed by lifecycle"
var usable = PermissionMatrix.Filter(roles, handler.FollowupIntents);

Beide Klassen arbeiten auch auf Rollenmengen: Eine Operator-Kennung kann mehrere Rollen gleichzeitig halten — etwa Notifizierender und Abfallerzeuger.

Die Allow-Listen im Überblick:

Rolle Erlaubte Intents
Notifier CreateSubmission, UpdateSubmission, CreateReplyToRequestInformation, SubmitRequestForChangeAfterConsent, CreateMovementTemplate, UpdateMovementTemplate, CreateMovementTakeBack, UpdateMovementTakeBack, SubmitMovementSignal, dazu die vier Annex-VII-Intents des Arrangers
Consignee CreateConsigneeReception, UpdateConsigneeReception und die Annex-VII-Pendants
Carrier CreateCarrierTransport, UpdateCarrierTransport und die Annex-VII-Pendants
WasteProducer leer
RecoveryDisposalFacility CreateFacilityReception, UpdateFacilityReception, CreateFacilityCompletion, UpdateFacilityCompletion und die Annex-VII-Pendants
Authority CreateRequestInformation, UpdateRequestInformation, SubmitDecision, UpdateDecision, SubmitAcknowledgement, SubmitReplyToRequestForChangeAfterConsent, SubmitMovementSignal

Drei Eigenheiten, die eine Oberfläche kennen muss:

Role.Authority lässt sich nicht ableiten

PermissionMatrixInference inferiert nur Rollen, die als Operator-Kennung im Dokument stehen. Behörden haben keine. Wer als Behörde handelt, übergibt Role.Authority explizit an die rollenbasierten Methoden.

Die Inferenz arbeitet außerdem ausschließlich auf der Serversicht (den Get…-Information-Typen). Direkt nach CreateSubmission und vor dem ersten Nachladen kommt ein leeres Set zurück — die Rollen sind dann noch nicht final, weil erst der Server festlegt, welcher Operator in welchem Slot landet.

Zwei SDK-Methoden haben überhaupt keinen Intent

SubmitNotificationSignal und SetFacilityCompletionUnderArticle15 haben kein Gegenstück im DiwassIntents-Enum. Folge: Die Permission-Matrix kann sie nicht bewerten, und sie erscheinen auch nicht in handler.FollowupIntents. Eine Oberfläche, die ihre Schaltflächen ausschließlich aus den Followup-Intents ableitet, zeigt Stornierung und Artikel-15-Bescheinigung nie an.

Die Matrix ist nicht die letzte Instanz

Die Rücknahme-Intents (CreateMovementTakeBack, UpdateMovementTakeBack) stehen in der Allow-Liste des Notifier, nicht in der der Authority. Nach der DiWaSS-Spezifikation ordnen die beteiligten Behörden die Rücknahme an; die Nutzlast verlangt einen Behörden-Domain-Code und eine Behördensignatur.

Ob eine Aktion jetzt zulässig ist, entscheidest du deshalb anhand von handler.FollowupIntents — die Liste kommt vom Server. Die Matrix eignet sich, um Aktionen anderer Rollen auszugrauen, nicht als letzte Prüfung.