除非用户是2个不同角色的成员,否则我想限制对特定网址的访问。在这种情况下,如果用户同时属于报告 AND 存档角色,我只想授予对此网址的访问权限。有没有办法在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>
答案 0 :(得分:1)
这有点难看,但是您可以继承您当前使用的角色提供程序(SqlRoleProvider,WindowsTokenRoleProvider,AuthorizationStoreRoleProvider),覆盖GetRolesForUser,调用基本实现以获取角色,并在必要时将它们组合在一起。然后显然将您的自定义角色提供程序放在&lt; roleManager&gt;中的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();
}
答案 1 :(得分:0)
您可以创建一个SQL函数,在给定特定用户ID,页面URL和允许角色列表(XML)的情况下,返回一个位,指示是否授予该URL访问权限,然后使用该函数设置一个标志将确定是否在javascript或DHTML菜单中显示为有效选择。
答案 2 :(得分:0)
你可以implement custom Role Provider。然后,您可以定义新的“假”角色ReportingAndArchiving,并在请求ReportingAndArchiving角色时检查用户是否属于IsUserInRole方法内的报告和存档角色。