PrincipalPermissionAttribute je zastaralá jako chyba
Konstruktor PrincipalPermissionAttribute je zastaralý a vytvoří chybu v době kompilace. Nelze vytvořit instanci tohoto atributu nebo jej použít pro metodu.
Změna popisu
V rozhraní .NET Framework a .NET Core můžete pomocí atributu PrincipalPermissionAttribute anotovat metody. Příklad:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
public void MyMethod()
{
// Code that should only run when the current user is an administrator.
}
Počínaje rozhraním .NET 5 nelze PrincipalPermissionAttribute použít atribut pro metodu. Konstruktor atributu je zastaralý a vytvoří chybu v době kompilace. Na rozdíl od jiných upozornění na obsoletion nemůžete chybu potlačit.
Důvod změny
Typ PrincipalPermissionAttribute , stejně jako jiné typy, které podtřídy SecurityAttribute, je součástí . Infrastruktura CAS (Code Access Security) technologie NET. V rozhraní .NET Framework 2.x – 4.x modul runtime vynucuje PrincipalPermissionAttribute poznámky při zadávání metody, i když aplikace běží ve scénáři plné důvěryhodnosti. .NET Core a .NET 5 a novější nepodporují atributy CAS a modul runtime je ignoruje.
Tento rozdíl v chování rozhraní .NET Framework na .NET Core a .NET 5 může vést ke scénáři selhání při otevření, kdy by měl být přístup zablokovaný, ale místo toho byl povolený. Pokud chcete zabránit scénáři "selhání při otevření", už nemůžete použít atribut v kódu, který cílí na .NET 5 nebo novější.
Zavedená verze
5,0
Doporučená akce
Pokud dojde k chybě obsoletion, musíte provést akci.
Pokud používáte atribut na metodu akce ASP.NET MVC:
Zvažte použití ASP. Integrovaná autorizační infrastruktura technologie NET. Následující kód ukazuje, jak anotovat kontroler s atributem AuthorizeAttribute . Modul runtime ASP.NET před provedením akce autorizuje uživatele.
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. } } }
Další informace najdete v tématu Autorizace na základě role v ASP.NET Core a Úvod k autorizaci v ASP.NET Core.
Pokud atribut používáte pro kód knihovny mimo kontext webové aplikace:
Proveďte kontroly ručně na začátku metody. To lze provést pomocí IPrincipal.IsInRole(String) metody.
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. }