我正在使用我的asp.net应用程序进行Windows身份验证
不同的用户可以访问网站的各个部分。
我想在配置文件中执行以下操作:
<appSettings>
<role1>
<user>agordon</user><user>jsmith</user>
</role1>
<role2><user>dtodd</user><user>kveel</user></role2>
</appSettings>
这可能吗?
在进行身份验证时,我会获得这样的用户名:
string username = HttpContext.Current.User.Identity.Name.ToString();
并检查该用户是否存在于特定角色
答案 0 :(得分:2)
使用<authorization>
元素:
<configuration>
<system.web>
<authorization>
<allow users="*" />
<deny users="?"/>
</authorization>
</system.web>
</configuration>
然后,您可以针对网站的特定部分修改该内容:
<location path="Pages/Administration">
<system.web>
<authorization>
<deny roles="*"/>
<allow roles="Admin" />
</authorization>
</system.web>
</location>
答案 1 :(得分:0)
你可以这样做,但这真的不是最好的方法。
这里的问题是appSettings不受Web.Config架构的控制,所以你需要以一种可怕的方式以编程方式枚举appSettings:
if (configurationSettings.HasKey("Role1")) { ... }
else if (configurationSettings.HasKey("Role2")) { ... }
else if (configurationSettings.HasKey("Role3")) { ... }
//continue ad.nauseum; it's not fun - trust me!
我知道这不是你问的问题,但是如果你使用的是普通的ASP.Net网络版,那么它就是一个小问题。在每个页面/控件中,您需要找出当前用户,然后确定该用户是否具有访问权限,然后重定向或继续。
如果您使用ASP.Net MVC,那么使用属性可以更清晰。
Authorize(Roles = "Managers")]
public ActionResult CompanySecrets()
{
return View();
}
正在执行的代码是,如果用户没有Managers角色,请不要授予他们访问权限。
为了提供相反的示例,这里是使用Web表单的类似方法(msdn示例):