2012-01-04 11 views
1

私たちのWebサイト(.net4、IIS 7.5、VS 2010、すべてかなりの在庫品)に実装されたカスタムASP.NETロールプロバイダがあります。私の質問は、ユーザーがページへのアクセスを拒否されたときの役割プロバイダーのリダイレクトを処理または代行する方法です。.netロールプロバイダのリダイレクトを処理する方法は?

私にはっきりさせてください。役割提供者が正しく機能しています。ウェブサイトのさまざまなサブディレクトリにweb.configファイルを作成し、アクセス用の適切な要素/属性を追加しました。それで、私が役割を持っていないサブディレクトリのページにアクセスしようとしているとしましょう...今、役割プロバイダは私をログインページにリダイレクトします(おそらく、メンバーシッププロバイダのweb.config値をよく)。

しかし私がやりたいことは、ログインページではなくカスタムの「アクセス拒否」ページにリダイレクトすることです。

多くのGoogle検索に基づいて、私は単純に機能しなかったいくつかのことを試しました。

例えば、ある人がカスタムApplication_Errorメソッドをglobal.asaxファイルに追加することを提案しました。それを試して、それは決してヒットしませんでした。再び

<error statusCode="401" redirect="AccessDenied.aspx" /> 

、働いたことはないという。

はまた、web.configファイル内のcustomErrorsセクションに追加してみました。

多くのデバッグブレークポイントを入れても、ロールプロバイダがライフサイクルの早い段階でその役割を果たし、ログインページに自動的にリダイレクトされることがわかります。

これを傍受する方法について考えていただければ幸いです。

ありがとうございました。

<forms loginUrl="login.aspx" /> 

私は心の中で持っている唯一の項目は、あなたがしている場合である:ユーザーがいるため、データベース内の何かのアクセス権を持っていない

+0

http://stackoverflow.com/a/4664529/110164に示されている_Custom Authorize Attribute_ソリューションが役立つはずです。次に、あなたが好きな場所にリダイレクトするために 'HandleUnauthorizedRequest'を上書きすることができます。 –

答えて

1

、それは設定要素としての形式で指定loginUrlにリダイレクトログインページでthis.User.Identity.IsAuthenticatedプロパティがtrueの場合、ユーザーはこれらの問題のいずれかのためにリダイレクトされたため、そこにアクセスしました。したがって、AccessDenied.aspxページにリダイレクトできます。これは、認証されたユーザーが拒否のためにのみログインするようにリダイレクトされている場合に機能します。そうでない場合は、さまざまな場所に送信する必要がある場合は、内蔵のリダイレクト機能をglobal.asaxにダンプし、Application_AcquireRequestStateハンドラを追加します。セッションへのアクセスの有無)を確認し、ユーザーのアクセス許可を確認し、それに応じてリダイレクトします(HttpContext.Current.Response.Redirect経由)。

+0

ブライアンに感謝していますが、ログインページがヒットしたこともあり、それがわれわれが発見したものであり、インテリジェントに対処しようとしています...つまり、初めてログインします。素晴らしいですが、問題はありません。次に、セッション状態を保持するように見える新しいブラウザタブ(IEまたはChromeなど)を表示します。さて、このウェブサイトのブックマークがログインページになっているとしましょう。新しいタブウィンドウでそのブックマーク/お気に入りをクリックします。さて、IsAuthenticatedは真ですが、私はロールプロバイダが私をバウンスするのではなく、自分でそこに着いた... –

+0

ユーザーがログインページを取得したら、許可されていないページにリダイレクトしますか? –

+0

右。すでに認証されたユーザーがログインページに達した場合(外見上は新しいブラウザータブを開き、ログインページのブックマークをクリックしても問題ありません)、それは問題ありません。ロールのプロバイダがアクセス権の問題のために跳ね返ってきた場合は、ログインページではなくカスタムページに移動します。ログインページが要求されるまでにこのケースを検出する方法はわかりません。 –

関連する問題