2010-11-24 12 views
4

私のSharePointのセットアップでは、サイトのフロントページにアクセスできない特定のユーザーグループがあります。彼らが直接訪問すると、SharePointから標準の「アクセスが拒否されました」ページが表示されます。HttpModuleイベント - インターセプトsharepointがaccessdenied.aspxにリダイレクト

私はフロントページへの訪問を傍受し、現在のユーザーをチェックし、アクセス可能なサブサイトにリダイレクトするHttpModuleを開発しています。

最初にPostAuthorizeRequestを使用しようとしましたが、以前のイベントでSharePointがトリガーされているように見えても、アクセス拒否ページにリダイレクトされます。フロントページにアクセスしたがまだリダイレクトされているユーザーでテストしたところ、リダイレクトは正常に機能しています。

ユーザー名/パスワードを入力した後にSharePointをリダイレクトする前に、そのユーザーを取得するには、どのイベントをキャプチャする必要がありますか?

答えて

3

コードで「権限のない」イベントを検出するのではなく、カスタムエラーを表示することをお勧めします。ユーザーがアクセス拒否ページにリダイレクトされると、SharePointは実際にエラーコード "401"(権限のないユーザー)を含むエラーをスローします。

web.configでは、401エラーのアプリケーションの動作を設定できます。 Webアプリケーションでカスタムエラーページを実行したことがある場合は、同じことです。あなたのweb.configファイルでCustomErrorノードを探して、このような何かにそれを変更します。

<customErrors mode="On" defaultRedirect="~/_layouts/CustomErrorPage.aspx"> 
    <error statusCode="401" redirect="~/_layouts/AccessDeniedPage.aspx" /> 
</customErrors> 

その後、あなたとあなたのCustomErrorPage.aspx AccessDeniedPage.aspxを作成し、12ハイブに展開。これらのページの背後にあるコードで

、あなたがしたいところはどこでもそれらをリダイレクトするためにPageLoadイベントを上書きすることができます。

protected void Page_Load(object sender, EventArgs e) 
{ 
    bool isLogged = HttpContext.Current.User.Identity.IsAuthenticated; 
    Response.Redirect("wherever"); 
} 

注意あなたが必要な場合は、この時点で、あなたはまだSPContextオブジェクトへのアクセスを持っていることそれは(私はあなたがユーザーのグループメンバーシップに応じて特定のコードを書いたがっていると仮定しています)。

これはSharePoint固有の動作ではありません。すべてのASP.NETアプリはそのように機能します。サイト全体の設定を使用すると、すべてのページの読み込み時などにアクセス許可を確認するのではなく、実行する必要があるとき(つまりアクセスが拒否されたとき)にのみコードを実行できます。

関連する問題