Ich habe eine asp.net Web API.
Ich möchte Selfhost meine Web API später auf einer azurblauen Website besitzen.
Ein angemeldeter Benutzer könnte dies im Browser /api/bankaccounts/3
um alle Details über bank account number 3
zu erhalten.
Aber der eingeloggte Benutzer ist nicht der Besitzer von bank account number 3
.
Wie muss ich meine Controller und die dahinter stehenden Dienste entwerfen?
im Benutzer kann nur seine eigenen Ressourcen in der Datenbank abrufen / ändern?
AKTUALISIEREN
Nachdem ich ein:
erstellt habe %Vor%Die Frage ist nun, dass der IsResouceOwner für einen bestimmten Dienst fest codiert ist = & gt; SchooleearService ist somit an die Schooleear SQL-Tabelle gebunden
Ich muss die IsResourceOwner-Methode generisch für alle SQL-Tabellen mit einem Feld UserId / UserEmail beibehalten.
Das Problem ist - und ich denke wirklich, dass niemand so vorgeht -, dass ich jede Ressourcenbesitzerprüfung der richtigen Sql-Tabelle in der HasUserPermission-Methode zuordnen muss.
Wie sollte dieses Mapping aussehen?
Überprüfen Sie den Controller-Namen "SchooleearController", also ist die zu überprüfende Tabelle die "Schoolyear" -Tabelle? Das ist lächerlich.
Dieses benutzerdefinierte Attribut "UserActionsAuthorizationFilter" befindet sich auf jedem "Data" -Controller.
Welche Controller-URL der Benutzer auslöst, um Daten abzurufen, bevor ich überprüfen muss, ob er Ressourcenbesitzer ist.
Ich denke, ich kann das nicht innerhalb eines Filters entscheiden.
Ich muss die Datenabfrage / -modifikation durch den Controller gehen lassen und den ResourceOwner-Check innerhalb eines Repositorys machen, kurz bevor der Datenabruf erfolgt.
Was halten Sie davon?
API
%Vor%REPO
%Vor%Im Allgemeinen sollte jede Methode in meinem Repository die UserId in der CRUD-Aktion berücksichtigen.
Was denkst du?
Siehe den folgenden Link - er behandelt sowohl die Authentifizierung (damit Sie wissen, wer anfragt) als auch die Autorisierung (damit Sie wissen, ob sie berechtigt sind, die Daten zu sehen):
Um ein anderes Detail hinzuzufügen - es wäre sehr üblich, Spalten und / oder Tabellen in Ihrer Datenbank zu haben, die die Autorisierung von Benutzern definieren. Es ist auch möglich (abhängig von Ihrem Authentifizierungsmechanismus), dass der Authentifizierungsanbieter "Ansprüche" oder andere Informationen bereitstellt, die definieren, auf was der Benutzer zugreifen darf. Dies könnte jedoch möglicherweise weniger sicher sein, da Sie wirklich auf die Quelle dieser Informationen vertrauen und sicherstellen müssen, dass sie nicht manipuliert wurde, bevor Sie sie an Ihre API senden.
Tags und Links asp.net-web-api c# asp.net-web-api2 service-layer