.NET 角色型安全性允許根據目前執行緒的主體身分進行授權。本文以最簡單的主控台程式示範宣告式與命令式的 PrincipalPermission 驗證。
static void Main() { OutHello(); Console.Read(); }
static void OutHello() { Console.WriteLine("hello world!"); }
[PrincipalPermission(SecurityAction.Demand, Role = "Administrators")]
static void OutHello() { Console.WriteLine("hello world!"); }
在 Main 中將 Thread.CurrentPrincipal 設為匿名使用者 (WindowsIdentity.GetAnonymous()) 呼叫 OutHello,會拋出 SecurityException(圖 1-1)。改設為目前 Windows 使用者 (WindowsIdentity.GetCurrent()),若該用戶屬 Administrators 群組則通過(圖 1-2)。

圖 1-1 匿名主體驗證失敗

圖 1-2 Administrators 主體驗證通過
static void OutHello() {
new PrincipalPermission("", "Administrators").Demand();
Console.WriteLine("hello world!");
}
GenericIdentity identity = new GenericIdentity("xuanhun");
string[] roles = { "Administrators" };
GenericPrincipal principal = new GenericPrincipal(identity, roles);
AppDomain.CurrentDomain.SetThreadPrincipal(principal);
new PrincipalPermission("xx", "Administrators").Demand(); // 身分不符,拋出異常(圖 1-3)

圖 1-3 自訂身分不符導致異常
此機制讓業務邏輯與身分驗證分離,支援 Windows、自訂或泛型主體,彈性極高。
作者:玄魂
出處:https://www.cnblogs.com/xuanhun/