根据web.config中的url设置不同的角色

时间:2012-01-17 22:06:49

标签: asp.net vb.net web-config

<authentication mode="Windows"/>
        <authorization>
            <allow users="USERS"/>
            <allow roles="ROLES"/>
            <deny users="*"/>
        </authorization>

有没有办法在这里写一个if语句来检测我在哪个url上,所以我可以允许该特定URL的某个角色。

我脑子里想要看到的示例代码:

If (UCase(Url) = UCase("URL")) Then
<allow roles="ROLES"/>
ElseIF(UCase(Url) = UCase("URL")) Then
<allow roles="ROLES"/>
ElseIF (UCase(Url) = UCase("URL")) Then
<allow roles="ROLES"/>
End If
<deny users="*"/>

这甚至是在web.config中允许的吗?如果不是我怎么能这样做呢?

我有3个网站。一个用于Dev,UAT和PROD。现在,对于每个站点,我为每个站点设置了不同的用户组。我只是想找到一种方法,我可以找到我所在的URL,并将其指向特定的用户组。我猜我必须为每个人制作一个web.config,因为你不能做条件语句,但我只是确定。如果我必须为每个人web.config做一个如何设置它?

4 个答案:

答案 0 :(得分:2)

编辑(改变整个答案,因为我认为您的问题现在不同了)

您最好的选择是在每个web.config中使用不同的配置设置,这是web.config文件的用途。如果每次部署web.config(手动或自动),则可能必须查看部署过程。

另一种选择是让您的应用程序通过了解其运行环境并拒绝使用代码进行访问来执行授权。那条道路显然比已经提供的东西更多,但是可以选择。

答案 1 :(得分:1)

或者(并且大部分时间更好)您应该在子文件夹中放置其他web.config文件 - 然后文件夹本身定义谁可以访问它。 在这些web.configs中,您需要拥有的是将覆盖父文件夹身份验证的身份验证部分。

一般情况下,这只适用于webforms,因为MVC摆脱了有意义的文件夹并完全支持不同的安全模型(Controller必须通过新的安全属性来确定访问权限)

答案 2 :(得分:1)

如果要将相同的Web应用程序部署到不同的环境,则可以考虑使用web.config转换。使用这种方法,您可以为每个环境创建一个特殊文件,该文件将采用默认开发web.config并更改仅某些值,在您的情况下为<authorization>标记(或者也可能是{ {1}}或<connectionStrings>代码(如果您愿意)。

在Visual Studio中,它看起来像这样:

web.config transform files

这仅适用于Web应用程序项目,不适用于网站项目(),仅适用于Visual Studio 2010及更高版本。*

您需要首先为每个环境创建解决方案配置。从主菜单中,选择<appSettings>。在这里,您可以管理每个配置。默认情况下,您将拥有 Debug Release ,您可以为您的解决方案添加 UAT Production 配置。

然后,您可以右键单击Web应用程序项目中的web.config文件,然后单击添加配置转换,您将找到每个配置的新转换:

Build > Configuration Manager

现在你必须编写转换,在你的情况下,它看起来像这样(对于web.UAT.config):

web.config
  web.Debug.config
  web.Production.config
  web.Release.config
  web.UAT.config

请注意我们如何指示转换完全替换<?xml version="1.0"?> <configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform"> <system.web> <authorization xdt:Transform="Replace"> <allow roles="USER-ACCEPTANCE-TEST" /> <deny users="*" /> </authorization> <system.web> </configuration> 标记。当您发布Web应用程序(右键单击并选择发布... )时,例如发送到桌面上的文件夹,以便通过FTP传输到UAT服务器时,就会发生这种情况。

请参阅此处获取一些教程:

答案 3 :(得分:0)

像这样在您的roleManager上替换:

<roleManager enabled="true" defaultProvider="DefaultRoleProvider">