2016-02-24 6 views
9

Kann eine Autorisierung gegen zwei oder mehr Richtlinien angewendet werden? Ich benutze ASP.NET 5, rc1.ASP.NET 5 Autorisieren gegen zwei oder mehr Richtlinien

[Authorize(Policy = "Limited,Full")] 
public class FooBarController : Controller 
{ 
    // This code doesn't work 
} 

Wenn nicht, wie kann ich dies erreichen, ohne Richtlinien zu verwenden? Es gibt zwei Benutzergruppen, die auf diesen Controller zugreifen können: "Voll" und "Eingeschränkt". Benutzer können entweder zu "Voll" oder "Eingeschränkt" gehören oder beides. Sie müssen nur zu einer der beiden Gruppen gehören, um auf diesen Controller zugreifen zu können.

Antwort

10

nicht so, wie Sie wollen, verwenden; Richtlinien sind so konzipiert, dass sie kumulativ sind. Wenn Sie beispielsweise zwei separate Attribute verwenden, müssen beide übergeben werden.

Sie müssen OR-Bedingungen innerhalb einer einzelnen Richtlinie auswerten. Aber Sie müssen es nicht als ORs in einem einzelnen Handler codieren. Sie können eine Anforderung mit mehr als einem Handler haben. Wenn einer der Handler den Erfolg signalisiert, ist die Anforderung erfüllt. Siehe Schritt 6 in meinem Authorization Workshop.

+0

Wenn Richtlinien kumulativ sind, warum werden die Standardwerte ersetzt, wenn benutzerdefinierte Richtlinien verwendet werden? Das Herz dieser Frage kommt von [dieser Frage] (https://stackoverflow.com/questions/44187969/why-are-unauthenticated-requests-allowed-in-custom-policies). Ich erkläre benutzerdefinierte Richtlinien und möchte nicht, dass nicht authentifizierte Anfragen in meine Autorisierungshandler gelangen. Der aktuelle Weg, den ich benutze, ist von Schritt 2 in Ihrem Autorisierungs-Workshop (Autorisierung aller Endpunkte und Setzen von '[AllowAnonymous]' wo nötig). Fühlt sich an wie ein Antipattern, aber ich könnte dumm sein! – steamrolla

+1

Grundsätzlich gehen wir davon aus, dass Sie wissen, was Sie tun, wenn Sie Ihre eigenen Richtlinien festlegen. Durch das Anwenden einer Richtlinie wird angezeigt, dass Sie den Standardwert überschreiben. – blowdart

+0

Verstanden. Es fühlt sich an, als würde die Standardrichtlinie eine "Baseline" sein, als wäre es Ihre erste Richtlinie in einer Sammlung von benutzerdefinierten Richtlinien. – steamrolla

-11

try Rolle statt

[Authorize(Role = "Limited,Full")] 
+5

Rollen sind keine Richtlinien. – blowdart