Uwaga
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Konstruktor PrincipalPermissionAttribute jest przestarzały i generuje błąd czasu kompilacji. Nie można instancjować tego atrybutu ani stosować go do metody.
Zmień opis
W programach .NET Framework i .NET Core można dodawać adnotacje do metod za pomocą atrybutu PrincipalPermissionAttribute . Przykład:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
public void MyMethod()
{
// Code that should only run when the current user is an administrator.
}
Począwszy od platformy .NET 5, nie można zastosować atrybutu PrincipalPermissionAttribute do metody. Konstruktor atrybutu jest przestarzały i generuje błąd czasu kompilacji. W przeciwieństwie do innych ostrzeżeń dotyczących przestarzałości, nie można zignorować błędu.
Przyczyna zmiany
Typ PrincipalPermissionAttribute, podobnie jak inne typy, które są podklasą SecurityAttribute, jest częścią infrastruktury zabezpieczeń dostępu do kodu platformy .NET (CAS). W programie .NET Framework 2.x — 4.x środowisko uruchomieniowe wymusza PrincipalPermissionAttribute adnotacje we wpisie metody, nawet jeśli aplikacja jest uruchomiona w scenariuszu pełnego zaufania. Programy .NET Core i .NET 5 i nowsze nie obsługują atrybutów CAS, a środowisko uruchomieniowe je ignoruje.
Ta różnica w zachowaniu programów .NET Framework do .NET Core i .NET 5 może spowodować "niepowodzenie otwarcia", w którym dostęp powinien zostać zablokowany, ale zamiast tego został dozwolony. Aby zapobiec scenariuszowi "fail open", nie można już zastosować atrybutu w kodzie przeznaczonym dla platformy .NET 5 lub nowszej.
Wersja wprowadzona
5,0
Zalecana akcja
Jeśli wystąpi błąd przestarzałości, musisz podjąć odpowiednie działania.
Jeśli stosujesz atrybut do metody akcji MVC ASP.NET:
Rozważ użycie wbudowanej infrastruktury autoryzacji w ASP.NET. Poniższy kod przedstawia sposób dodawania adnotacji do kontrolera za pomocą atrybutu AuthorizeAttribute . Środowisko uruchomieniowe ASP.NET autoryzuje użytkownika przed wykonaniem akcji.
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. } } }
Aby uzyskać więcej informacji, zobacz Autoryzacja oparta na rolach w programie ASP.NET Core i Wprowadzenie do autoryzacji w programie ASP.NET Core.
Jeśli stosujesz atrybut do kodu biblioteki poza kontekstem aplikacji internetowej:
Wykonaj testy ręcznie na początku metody. Można to zrobić przy użyciu 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. }