PrincipalPermissionAttribute 已淘汰為錯誤
PrincipalPermissionAttribute 建構函式已淘汰,而且會產生編譯時期錯誤。 您無法具現化此屬性,或將其套用至方法。
變更描述
在 .NET Framework 和 .NET Core 上,您可以使用 PrincipalPermissionAttribute 屬性標註方法。 例如:
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
public void MyMethod()
{
// Code that should only run when the current user is an administrator.
}
從 .NET 5 開始,您便無法將 PrincipalPermissionAttribute 屬性套用到方法。 屬性的建構函式已淘汰,而且會產生編譯時期錯誤。 這與其他淘汰的警告不同,您無法隱藏錯誤。
變更原因
PrincipalPermissionAttribute 類型和以 SecurityAttribute 為子類別的其他類型一樣,是屬於 .NET 的程式碼存取安全性 (CAS) 基礎結構的一部分。 在 .NET Framework 2.x - 4.x 中,執行階段會在方法輸入上強制執行 PrincipalPermissionAttribute 註釋,即便應用程式是在完全信任的情況下執行也是如此。 .NET Core 和 .NET 5 及更新版本不支援 CAS 屬性,而且執行階段會忽略這些屬性。
從 .NET Framework 到 .NET Core 和 .NET 5 的行為差異可能會導致產生「失敗開啟」案例,使存取在應該受到禁止的情況下受到允許。 為了防止「失敗開啟」案例,您無法再於以 .NET 5 或更新版本為目標的程式碼中套用該屬性。
導入的版本
5.0
建議的動作
如果您遇到混淆錯誤,則必須採取動作。
如果您要將屬性套用至 ASP.NET MVC 動作方法:
請考慮使用 ASP.NET 的內建授權基礎結構。 下列程式碼示範如何使用 AuthorizeAttribute 屬性標註控制器。 ASP.NET 執行階段會在執行動作之前授權使用者。
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. } } }
如需詳細資訊,請參閱 ASP.NET Core 中的角色型授權 和 ASP.NET Core 中的授權簡介。
如果您要將屬性套用至 Web 應用程式內容以外的程式庫程式碼:
以手動方式在方法開頭執行檢查。 這可以使用 IPrincipal.IsInRole(String) 方法來完成。
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. }