3

PrinciplePermissionAttribute例外の原因となる問題が発生しています。メソッドに属性があるページは、Load最初のログインの直後に例外をスローします。

<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()機能を使用する場合、問題はありません。

最初のログイン後、 myThread.CurrentPrincipalはタイプGenericPrincipalではなくRolePrincipal. 後続のリクエストでは、ジェネリックの代わりに正しいタイプが表示されます。Global.asaxイベントのファイルでこれを強制しようとしましたが、これが発生した後PostAuthenticateにasp.netが設定されているようです。GenericPrincipal

この動作を修正する方法についてのアイデアはありますか、またはそのRoles.IsUserInRole()方法を使用して立ち往生していますか?

UPDATEここ
でパイプラインで何が起こっているのかについての説明を見つけた後、なぜそれを変更しても役に立たなかったのかがわかります。これをテストした以前のプロトタイププロジェクトがありましたが、そこで再現できませんでした。プロジェクトの種類と関係があるのだろうか。プロトタイプは Web サイト プロジェクトであり、問​​題のあるプロジェクトは Web アプリケーション プロジェクトです。Global.asax

GenericPrincipalが に変更されるのは奇妙だと思いますRolePrincipalが、最初のリクエストが処理された後でのみです。したがって、「Page_Load」が実行される前に発生しないように、機能していないとは言い難いです。

4

1 に答える 1

0

フォーム認証を使用していると思います...

PrincipalPermission 属性は、Thread.CurrentPrincipal をチェックします。Roles.IsUserInRole() は HttpContext.Current.User をチェックします。したがって、それらが異なる場合は、Application_AuthenticateRequest イベントで Global.asax ファイルでこれを修正できます。

于 2012-03-23T05:41:30.153 に答える