简单的web.config文件问题asp.net

时间:2011-08-23 00:14:26

标签: c# asp.net iis

我正在使用我的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();

并检查该用户是否存在于特定角色

2 个答案:

答案 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示例):

http://support.microsoft.com/kb/311495