Erstellen eines benutzerdefinierten AuthorizeAttribute in der Web-API (.Net Framework)C#

Ein Treffpunkt für C#-Programmierer
Anonymous
 Erstellen eines benutzerdefinierten AuthorizeAttribute in der Web-API (.Net Framework)

Post by Anonymous »

Ich verwende OAuth2.0 Owin (Passwortgewährung) in meiner WebAPI. Meine erste Token-Antwort ist wie folgt

Code: Select all

{
"access_token": "_ramSlQYasdsRTWEWew.....................",
"token_type": "bearer",
"expires_in": 17999,
"permissions": {
"user": [
"Add",
"Update",
"Delete"
],
"Product": [
"Read",
"Create"
]
}
}
Ich habe die Antwort angepasst, indem ich einen neuen Schlüssel namens „permissions“ erstellt habe, der die Berechtigungen für den entsprechenden Benutzer enthält.
Von hier aus muss ich jede Anfrage von meinem Ressourcenserver validieren, indem ich überprüfe, ob der Benutzer über ausreichende Berechtigungen verfügt, um die API mithilfe des Autorisierungsattributs aufzurufen.
Ich habe hier ein ähnliches Beispiel gefunden, in dem es um Dot Net Core geht, was für meinen Fall nicht geeignet ist.
Der schwierige Teil besteht darin, dass der Berechtigungs- JSON-Schlüssel selbst einen Komplex mit ArrayList bildet

Code: Select all

[CustomAuthorize(PermissionItem.Product, PermissionAction.Read)]
public async Task Index()
{
return View(Index);
}

public class CustomAuthorize : AuthorizeAttribute {
public AuthorizeAttribute (PermissionItem item, PermissionAction action) {
//Need to initalize the Permission Enums
}
public override void OnAuthorization (HttpActionContext actionContext) {
//Code to get the value from Permissions ArrayList and compare it with the Enum values
}
}
Das Obige ist die Idee, die ich habe. Aber aufgrund der Komplexität des Vergleichs von Berechtigungsschlüssel und Enumeration komme ich nicht weiter.
Wenn die Berechtigung für den Benutzer sowohl „Hinzufügen“ als auch „Aktualisieren“ lautet, bedeutet das dann, dass ich vor meinem Controller zwei Attributbedingungen erstellen muss?
Wie:

Code: Select all

[CustomAuthorize(PermissionItem.User, PermissionAction.Add)]
[CustomAuthorize(PermissionItem.User, PermissionAction.Update)]
Was dazu führt, dass weitere Zeilen mit Attributen hinzugefügt werden. Gibt es also eine Möglichkeit, es wie in einer einzelnen Bedingung mit | getrennt zu gestalten?

Code: Select all

[CustomAuthorize(PermissionItem.User, PermissionAction.Update|PermissionAction.Add)]

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post