2009-07-23 63 views
0

我想限制對特定url的訪問,除非用戶是2個不同角色的成員。在這種情況下,我只想授予對該URL的訪問權限,前提是該用戶既包含報告也包含存檔角色。有沒有辦法在ASP.net中做到這一點?Asp.Net條件URL角色認證

<location path="testpage.aspx"> 
<system.web> 
    <authorization> 
    <allow roles="Reporting, Archiving"/> 
    <deny users="*"/> 
    </authorization> 
</system.web> 

我想是這樣的:

<location path="testpage.aspx"> 
<system.web> 
    <authorization> 
    <allow roles="Reporting & Archiving"/> 
    <deny users="*"/> 
    </authorization> 
</system.web> 

+1

它可能是另一個角色,意味着報告和檔案?我不記得.net的默認實現有你請求的功能,除非你做了你自己的角色實現。 – xandy 2009-07-23 15:43:35

+0

您應該將其作爲答案發布,xandy。 – Greg 2009-07-23 15:45:29

+0

是的,我可以創建另一個包含報告和存檔的角色,但我試圖避免該b/c,我不得不更新現有用戶以將其添加到他們的個人資料中。我希望在web.config中有一個簡單的方法來完成它。 – Jfetner 2009-07-23 15:46:55

回答

1

它有點醜,但是你可以繼承你當前正在使用的角色提供者(SqlRoleProvider,WindowsTokenRoleProvider,AuthorizationStoreRoleProvider),覆蓋GetRolesForUser,調用基礎實現來獲取角色,並在必要時組合它們。然後顯然將您的自定義角色提供程序放置在<roleManager>配置部分的web.config中。

你只需要重寫一個方法(也許GetUsersInRole)並根據需要組合它們。

public override string[] GetRolesForUser(string username) { 
    List<string> roles = new List<string>(base.GetRolesForUser(username)); 
    if(roles.Contains("Reporting") && roles.Contains("Archiving")) { 
     roles.Add("ReportingAndArchiving"); 
    } 
    return roles.ToArray(); 
} 
0

您可以創建針對指定特定用戶ID的SQL功能,網頁URL,並允許角色列表(XML)返回一個位,指示訪問是否被授予該URL,然後使用它來設置一個標誌,該標誌將確定是否在javascript或DHTML菜單中將其顯示爲有效選項o無論如何。

0

您可以implement custom Role Provider。然後,您可以定義新的「假」角色ReportingAndArchiving,並在請求ReportingAndArchiving角色時檢查用戶是否屬於IsUserInRole方法內的Reporting and Archiving角色。