2012-03-22 3 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.CurrentPrincipalGenericPrincipalであり、RolePrincipalではないことに気付きました。後続の要求は、ジェネリックの代わりに正しいタイプを示します。私はPostAuthenticateイベントのGlobal.asaxファイルでこれを強制しようとしましたが、この後にasp.netがGenericPrincipalに設定されているようです。

この問題を解決する方法や、Roles.IsUserInRole()メソッドを使用していますか?

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

GenericPrincipalRolePrincipalに変更されていることは間違いですが、最初のリクエストが処理された後でしかないと思います。だから私の 'Page_Load'が実行される前にそのようなことが起こらないと言うのは難しいです。

答えて

0

私はあなたがフォーム認証を使用していると思う...

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