2011-09-07 79 views
1

在一個網站中,我使用了PrincipalPermission屬性來限制對某些方法的訪問。如何在PrincipalPermissionAttribute需求失敗時找到所需的角色?

這裏有一個canoncial例如:

class Program 
{ 
    static void Main(string[] args) 
    { 
     Foo(); 
    } 

    [System.Security.Permissions.PrincipalPermission(System.Security.Permissions.SecurityAction.Demand, Role = "Winners")] 
    static void Foo() 
    { } 
} 

如果校長不在指定的角色,則.NET基礎設施投用的通用消息「請求主體權限失敗」一個System.Security.SecurityException。

如果權限檢查失敗,我想記錄PrincipalPermission需要的角色。這對我們的支持人員來說非常有用,他們可以將角色分配給用戶和/或監視日誌以查看是否有可疑事件發生。顯然,出於安全目的,最終用戶仍然會看到通用的未授權消息。我遍歷SecurityException本身,但它沒有任何地方的「角色」。

有無論如何得到這些信息嗎?

回答

1

如果您的代碼是完全可信的,則可以通過解析SecurityException的FirstPermissionThatFailed屬性的XML表示來提取所需的信息。但是,爲了檢測「可疑」活動的第二個目的,最好簡單地記錄SecurityException的ToString()方法的返回值。這將包括拒絕的PrincipalPermission的詳細信息和發生異常的堆棧跟蹤。假設支持人員瞭解如何將其與應用程序結構聯繫起來,堆棧跟蹤給出的上下文可能非常有用。

+0

啊哈 - 我看得很完美,非常感謝。 –