Sdílet prostřednictvím


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

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.
    }
    

Ovlivněná rozhraní API