2010-08-06 260 views
1

我試圖以聲明方式使用基於角色的授權,當未經授權的用戶嘗試訪問頁面時,它從不觸發異常或向用戶顯示錯誤消息。我應該怎麼做才能顯示未經授權的消息?這是可能的聲明方式?基於角色的授權

使用編碼不是一個很好的選擇意義我有幾個角色,文件夾授權幾個角色,而其他文件夾授權一個角色。

謝謝

+0

你可以使用你的配置嗎?它做什麼而不是顯示錯誤? – Greg 2010-09-01 20:16:36

+0

你的問題沒有明確定義。有明確定義的機制來執行聲明性訪問控制,但在標準的asp.net中,它們都不會導致503.最可能希望的是非描述性重定向到登錄頁面。這在許多情況下可能會有問題並且不令人滿意。請更清楚地定義你正在嘗試做什麼以及你迄今採取了哪些措施來實現這一目標。 – 2010-09-04 02:45:54

回答

3

在您的登錄頁面中使用以下代碼將用戶重定向到未經授權的頁面或默認頁面。

protected void Page_Load(object sender, EventArgs e) 
    { 
     if(Page.IsPostBack) 
      return; 

     if(!Request.IsAuthenticated) 
      return; 

     if(!string.IsNullOrEmpty(Request.QueryString["ReturnUrl"]) && !UrlAuthorizationModule.CheckUrlAccessForPrincipal(Request.QueryString["ReturnUrl"], User,"GET")) 
     { 
      // In Forms Authentication, authenticated but unauthorized requests are converted into a Redirect to the Login page. 
      // Redirect these to an error page instead. 
      Response.Redirect("~/UnauthorizedAccess.aspx", false); 
     } 
     else 
     { 
      Response.Redirect(FormsAuthentication.DefaultUrl, false); 
     } 
    } 

請參閱此鏈接發生了什麼,並更多信息的圖片:

http://www.asp.net/security/tutorials/user-based-authorization-cs

+0

不當使用版權材料。 – 2010-09-04 02:41:41

+0

@Sky Sanders:我想,我已經刪除了你指的材料。如果沒有,請提供更多詳情。 – Greg 2010-11-30 17:15:43

0

如果授權失敗,它會拋出異常。它必須通過。你使用什麼進行身份驗證?你禁用了匿名訪問嗎?

+0

您是否確定,因爲當我使用假角色時,我被重定向到登錄頁面!!什麼是機會?匿名訪問被禁用。 – Costa 2010-08-07 15:53:08

+0

我沒有意識到你有一個身份驗證失敗的重定向設置。你使用什麼類型的認證? – Ryan 2010-08-09 16:30:24

+0

asp.net表單身份驗證 – Costa 2010-08-23 06:10:12

0

也許你可以使用網站地圖。更多關於那些here,再加上一點關於綁定安全性的問題here

0

它也可以使用web.config中設置各種文件夾或文件的權限。每個文件夾都可以有一個列表允許或丹尼斯像這樣:

<?xml version="1.0"?> 
<configuration> 
    <system.web> 
    <authorization> 
     <allow roles="Administrators" /> 
     <allow roles="Random Role" /> 
     <deny users="*" /> 
     <deny users="?" /> 
    </authorization> 
    </system.web> 
</configuration> 

然後當有人打,要求他們無權它會重定向到登錄頁面授權頁面。然後,您可以檢查它們來自的頁面的查詢字符串,並可能設置特定於案例的響應,或者至少在它上面有returnURL頁面時說「您無權查看此頁面」。