簡體   English   中英

Asp.Net條件URL角色身份驗證

[英]Asp.Net Conditional URL Role Authentication

我想限制對特定URL的訪問,除非用戶是2個不同角色的成員。 在這種情況下,如果用戶同時具有“報告存檔”角色,則只希望授予對該URL的訪問權限。 有沒有辦法在ASP.net中做到這一點?

<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>

這有點丑陋,但是您可以從當前使用的角色提供程序(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();
}

您可以創建一個SQL函數,該函數給出特定的用戶ID,頁面URL和允許的角色(XML)列表,並返回一個位,指示是否授予對該URL的訪問權限,然后使用該位來設置一個標志,該標志確定在javascript或DHTML菜單等中將其顯示為有效選擇。

您可以實現自定義角色提供程序 然后,您可以定義新的“假”角色ReportingAndArchiving,並在請求ReportingAndArchiving角色時檢查用戶是否屬於IsUserInRole方法內的Reporting and Archiving角色。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM