Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le PrincipalPermissionAttribute constructeur est obsolète et génère une erreur au moment de la compilation. Vous ne pouvez pas instancier cet attribut ou l’appliquer à une méthode.
Description de la modification
Sur .NET Framework et .NET Core, vous pouvez annoter des méthodes avec l’attribut PrincipalPermissionAttribute . Par exemple:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
public void MyMethod()
{
// Code that should only run when the current user is an administrator.
}
À compter de .NET 5, vous ne pouvez pas appliquer l’attribut PrincipalPermissionAttribute à une méthode. Le constructeur de l’attribut est obsolète et génère une erreur au moment de la compilation. Contrairement à d’autres avertissements d’obsoletion, vous ne pouvez pas supprimer l’erreur.
Raison de la modification
Le type PrincipalPermissionAttribute, comme d'autres types qui sont des sous-classes de SecurityAttribute, fait partie de l'infrastructure de sécurité d'accès au code (CAS) de .NET. Dans .NET Framework 2.x - 4.x, le runtime applique des annotations PrincipalPermissionAttribute à l’entrée de méthode, même si l’application s’exécute sous un scénario de confiance totale. .NET Core et .NET 5 et versions ultérieures ne prennent pas en charge les attributs CAS, et le runtime les ignore.
Cette différence de comportement entre .NET Framework et .NET Core et .NET 5 peut entraîner un scénario « échec d’ouverture », où l’accès doit avoir été bloqué, mais a été autorisé. Pour empêcher le scénario « échec d’ouverture », vous ne pouvez plus appliquer l’attribut dans le code qui cible .NET 5 ou version ultérieure.
Version introduite
5,0
Action recommandée
Si vous rencontrez l’erreur d’obsolescence, vous devez prendre des mesures.
Si vous appliquez l’attribut à une méthode d’action MVC ASP.NET :
Envisagez d’utiliser l’infrastructure d’autorisation intégrée d’ASP.NET. Le code suivant montre comment annoter un contrôleur avec un AuthorizeAttribute attribut. Le runtime ASP.NET autorisera l’utilisateur avant d’effectuer l’action.
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. } } }Pour plus d’informations, consultez l’autorisation basée sur les rôles dans ASP.NET Core et présentation de l’autorisation dans ASP.NET Core.
Si vous appliquez l’attribut au code de bibliothèque en dehors du contexte d’une application web :
Effectuez les vérifications manuellement au début de votre méthode. Pour ce faire, utilisez la IPrincipal.IsInRole(String) méthode.
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. }