Frau Aydin darf alles bearbeiten, Herr Kowalski, der Monteur, darf lesen. Im alten Programm sieht man das an den ausgegrauten Schaltflächen: Wer nicht in der Gruppe der Disposition ist, kann nicht auf „Speichern“ klicken. Das ist die ganze Rechteprüfung, und sie sitzt im Fenster. Diese Lektion überträgt sie auf die Web-API und die Blazor-Seiten. Sie schreibt zuerst auf, was das alte Programm wirklich prüft, übersetzt das in Richtlinien und sichert es mit Tests ab. Die Grundlagen von Rollen und Richtlinien in ASP.NET Core kennen Sie aus K2, Modul 2.6 (Anmelden und Rechte); hier steht, was beim Übertragen eines gewachsenen Programms dazukommt.

Die alten Rechte aufschreiben

Bevor Sie eine Richtlinie schreiben, lesen Sie das alte Programm nach Stellen ab, an denen Berechtigung.DarfBearbeiten oder gar nichts geprüft wird. Das Ergebnis für das Auftragsbuch (der Code steht in Lektion M1.2):

Stelle Alte Prüfung Wer darf Neue Richtlinie
Auftragsliste ansehen keine alle Lesen
Aufträge in der Tabelle ändern, „Speichern“ ReadOnly und Enabled im Formular Disposition Bearbeiten
„Rechnung drucken“ als Schaltfläche Enabled = DarfBearbeiten Disposition Bearbeiten
„Rechnung drucken“ im Menü „Datei“ keine alle Bearbeiten
„Export an Buchhaltung“ Enabled = DarfBearbeiten Disposition Bearbeiten
Kundenstamm ändern ReadOnly = !DarfBearbeiten Disposition Bearbeiten
Wartungsauftrag anlegen Enabled = DarfBearbeiten Disposition Bearbeiten
„Plan für Monteure exportieren“ keine alle Lesen
der Aufruf Speichern() selbst keine jeder, der ihn erreicht Bearbeiten

Die vierte Zeile ist ein Fund. Die Schaltfläche „Rechnung drucken“ ist für Monteure gesperrt, der Menüeintrag „Datei, Rechnung drucken“ nicht, und beide rufen dieselbe Methode. Die vergibt eine Rechnungsnummer, setzt den Status auf „Abgerechnet“ und speichert. Ein Monteur konnte also über das Menü eine Rechnung erzeugen, ohne dass die Prüfung etwas bemerkte. Ob das je jemand getan hat, weiß kein Protokoll. Der Fehler ist typisch für Rechte, die an Steuerelementen hängen: Jedes neue Steuerelement, jeder neue Weg zur selben Methode braucht seine eigene Prüfung, und irgendwann fehlt eine.

Nehmen Sie den Fehler nicht ins neue System mit. Weil das Erzeugen einer Rechnung schreibt, verlangt es Bearbeiten, ganz gleich, wie die Anfrage ankommt. Ob das für Monteure so gewollt ist, ist eine Fachfrage und gehört in docs/fragen-fachabteilung.md.