2012-03-22 45 views
3

我遇到了導致異常的PrinciplePermissionAttribute問題。初次登錄後,我在Load方法中擁有該屬性的任何頁面都會立即引發異常。ASP.Net會員委託人允許問題

<PrincipalePermission(SecurityAction.Demand, role:="Level1")> _ 
Protected Sub Page_Load(ByVal sender As Object, ByVal e as System.EventArgs) Handles Me.Load 
End Sub 

這會拋出異常Request for principal permission failed

如果我刪除這個頁面加載正常,我可以導航到另一個頁面,確實有這個相同的屬性,它的工作完美無瑕。此外,如果我使用會員制系統Roles.IsUserInRole()函數我沒有問題。

我注意到,在初始登錄後,我的Thread.CurrentPrincipal的類型爲GenericPrincipal,而不是RolePrincipal。隨後的請求會顯示正確的類型來代替通用。我試圖在PostAuthenticate事件中的Global.asax文件中強制執行此操作,但是在發生這種情況後,asp.net似乎正在設置GenericPrincipal

有關如何解決此問題的任何想法,還是我堅持使用Roles.IsUserInRole()方法?

UPDATE
找到一些解釋成什麼在管道here發生的事情,我可以看到爲什麼在Global.asax改變它並沒有幫助後。我有一個早期的原型項目,我測試了這一點,但我不能在那裏重現它。我想知道它是否與項目類型有關。原型是一個Web站點項目,問題是一個Web應用程序項目。

我認爲奇怪的是,GenericPrincipal被更改爲RolePrincipal,但只有在初始請求處理完畢後。所以很難說它不像我們的'Page_Load'執行時那樣工作。

回答

0

我認爲你正在使用窗體身份驗證...

屬性的PrincipalPermission檢查Thread.CurrentPrincipal中。 Roles.IsUserInRole()檢查HttpContext.Current.User。所以,如果它們不同,你可以在Application.AuthenticateRequest事件中的Global.asax文件中進行更正。