Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Der PrincipalPermissionAttribute Konstruktor ist veraltet und erzeugt einen Kompilierungszeitfehler. Sie können dieses Attribut nicht instanziieren oder auf eine Methode anwenden.
Änderungsbeschreibung
In .NET Framework und .NET Core können Sie Methoden mit dem PrincipalPermissionAttribute Attribut kommentieren. Beispiel:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
public void MyMethod()
{
// Code that should only run when the current user is an administrator.
}
Ab .NET 5 können Sie das PrincipalPermissionAttribute Attribut nicht auf eine Methode anwenden. Der Konstruktor für das Attribut ist veraltet und erzeugt einen Kompilierungszeitfehler. Im Gegensatz zu anderen Veraltungswarnungen können Sie den Fehler nicht unterdrücken.
Grund für Änderung
Der PrincipalPermissionAttribute Typ ist wie andere Typen, die unterklassen SecurityAttributesind, Teil von . Nets Code Access Security (CAS)-Infrastruktur. In .NET Framework 2.x bis 4.x erzwingt PrincipalPermissionAttribute Anmerkungen für den Methodeneintrag selbst dann, wenn die Anwendung in einem Szenario mit voller Vertrauenswürdigkeit ausgeführt wird. .NET Core und .NET 5 und höher unterstützen keine CAS-Attribute, und die Laufzeit ignoriert sie.
Dieser Unterschied im Verhalten von .NET Framework zu .NET Core und .NET 5 kann zu einem "Fail Open"-Szenario führen, in dem der Zugriff blockiert werden sollte, aber stattdessen zulässig ist. Um das Szenario "Fail Open" zu verhindern, können Sie das Attribut nicht mehr im Code anwenden, der auf .NET 5 oder höher ausgerichtet ist.
Eingeführte Version
5.0
Empfohlene Maßnahme
Wenn der Veraltungsfehler auftritt, müssen Sie Maßnahmen ergreifen.
Wenn Sie das Attribut auf eine ASP.NET MVC-Aktionsmethode anwenden:
Erwägen Sie die Verwendung der integrierten Autorisierungsinfrastruktur von ASP.NET. Der folgende Code veranschaulicht, wie ein Controller mit einem AuthorizeAttribute Attribut kommentiert wird. Die ASP.NET Laufzeit autorisiert den Benutzer vor dem Ausführen der Aktion.
using Microsoft.AspNetCore.Authorization; namespace MySampleApp { [Authorize(Roles = "Administrator")] public class AdministrationController : Controller { public ActionResult MyAction() { // This code won't run unless the current user // is in the 'Administrator' role. } } }Weitere Informationen finden Sie unter Rollenbasierte Autorisierung in ASP.NET Core und Einführung in die Autorisierung in ASP.NET Core.
Wenn Sie das Attribut auf Bibliothekscode außerhalb des Kontexts einer Web-App anwenden:
Führen Sie die Prüfungen am Anfang der Methode manuell aus. Dies kann mithilfe der IPrincipal.IsInRole(String) Methode erfolgen.
using System.Threading; void DoSomething() { if (Thread.CurrentPrincipal == null || !Thread.CurrentPrincipal.IsInRole("Administrators")) { throw new Exception("User is anonymous or isn't an admin."); } // Code that should run only when user is an administrator. }