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

问题描述 投票:0回答:4
<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,我该如何设置呢?

asp.net vb.net web-config
4个回答
2
投票

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

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

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


1
投票

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

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


1
投票

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

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

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

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

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

web.config
  web.Debug.config
  web.Production.config
  web.Release.config
  web.UAT.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>

请注意我们如何指示转换完全替换<authorization>标签。当您发布Web应用程序(右键单击并选择“发布...”)时会发生这种情况,例如发布到桌面上的文件夹,以便通过FTP传输到UAT服务器。

在这里查看一些教程:


0
投票

像你这样替换你的roleManager:

<roleManager enabled="true" defaultProvider="DefaultRoleProvider">
© www.soinside.com 2019 - 2024. All rights reserved.