2010-11-24 60 views
4

對於我的SharePoint安裝,我有一個特定的用戶組,無法訪問站點的首頁。如果他們直接訪問它們,他們將從SharePoint獲得標準的「訪問被拒絕」頁面。HttpModule事件 - 攔截共享點重定向到accessdenied.aspx

我正在開發一個攔截訪問首頁的HttpModule,檢查當前用戶並將他重定向到他們有權訪問的子站點。

我第一次嘗試使用PostAuthorizeRequest,但它似乎在早期事件觸發SharePoint,並仍然重定向到訪問拒絕頁面。我已經測試了一個可以訪問首頁但仍然被重定向的用戶,並且在那裏重定向工作正常。

我需要捕獲哪些事件才能在用戶輸入用戶名/密碼後但在SharePoint重定向之前獲取用戶?

回答

3

而不是在代碼中捕獲「未授權」事件,我建議你去自定義錯誤。當用戶被重定向到拒絕訪問頁面時,SharePoint實際上會拋出錯誤代碼爲「401」(未經授權)。

在您的web.config中,您可以配置應用程序的401錯誤行爲。如果您曾經在網絡應用程序上完成過自定義錯誤頁面,那就是一回事。尋找你的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應用程序都是這樣工作的使用站點範圍的配置將允許您僅在需要運行時(即拒絕訪問時)運行代碼,而不是檢查每個頁面加載或其他類似的權限。