0

我想限制对特定 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>

4

3 回答 3

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();
}
于 2009-07-23T17:38:09.597 回答
0

您可以创建一个 SQL 函数,给定特定的用户 ID、页面 URL 和允许的角色列表 (XML),返回一个指示是否授予该 URL 访问权限的位,然后使用它来设置一个标志,该标志将确定是否将其显示为 javascript 或 DHTML 菜单或其他任何内容中的有效选择。

于 2009-07-23T15:42:22.217 回答
0

您可以实现自定义 Role Provider。然后,您可以定义新的“假”角色 ReportingAndArchiving,并在请求 ReportingAndArchiving 角色时检查用户是否属于 IsUserInRole 方法中的 Reporting 和 Archiving 角色。

于 2009-07-23T16:04:13.780 回答