2012-01-17 48 views
0
<authentication mode="Windows"/> 
     <authorization> 
      <allow users="USERS"/> 
      <allow roles="ROLES"/> 
      <deny users="*"/> 
     </authorization> 

有沒有辦法在這裏編寫if語句來檢測我在哪個url上,這樣我就可以允許某個特定URL的某個角色。在我的頭上根據web.config中的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,我該如何着手設置?

+0

你對連接字符串做什麼? (我假設你有不同的數據庫爲每個應用程序) – davidsleeps 2012-01-18 04:11:15

+0

@davidsleeps我確實有三個單獨的連接字符串設置。每一個 – Samjus 2012-01-18 15:49:51

回答

2

編輯(改變了整個答案,因爲我覺得現在你的問題是不同的)

你最好的選擇是在這就是web.config文件中的每個web.config中有不同的配置設置。如果每次部署web.config(手動或自動),則可能必須查看部署過程。

另一種選擇是讓應用程序通過了解它運行的環境並拒絕使用代碼進行訪問來執行授權。這條道路明顯比已經提供的東西更多,但是是一種選擇。

+0

注意:不是將其添加到主web.config文件,而是實際上可以在每個受影響的子文件夾中放置不同的web.config文件,並具有適當的權限要求。 – NotMe 2012-01-17 22:14:08

+0

@克里斯,也許我沒有讀過它的權利...重新讀它,這仍然會工作 - 除非他有很多角色,並且必須爲每個可能的角色定義它們... – davidsleeps 2012-01-17 22:14:44

1

或者(大多數時候更好),你應該在你的子文件夾中放置額外的web.config文件 - 然後文件夾本身定義誰可以訪問它。 在這些web.configs中,您所需要的是將覆蓋父文件夾身份驗證的身份驗證部分。

一般來說,這只是正常工作在網絡表單,如MVC擺脫了有意義的文件夾,並完全支持不同的安全模式(就是控制器必須弄清楚通過新的安全屬性的訪問)

1

如果部署相同的web應用程序不同的環境,那麼你可以考慮使用web.config轉換。使用這種方法,您可以爲每個環境設置一個特殊文件,這些文件將採用默認開發web.config,並且只更改,在您的情況下爲<authorization>標記(如果需要也可以是<connectionStrings><appSettings>標記)。

在Visual Studio中,它看起來是這樣的:

web.config transform files

這隻適用於Web應用程序項目,而不是網站項目(),並只與Visual Studio 2010和更高版本*

您需要先爲每個環境創建一個解決方案配置。從主菜單中選擇Build > Configuration Manager。在這裏您可以管理每個配置。默認情況下,你將有調試發佈,您可以添加UAT生產配置爲您的示例解決方案。

然後你可以用鼠標右鍵單擊您的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

我應該讓你知道我正在使用Visual Studio 2005. – Samjus 2012-01-17 22:43:42

+0

啊,太糟糕了,這是一個不錯的功能。在此之前,我們使用XSLT樣式表來使用[命令行處理器]轉換web.config文件(http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=21714)。雖然可以將它作爲任務添加到MSBuild中,但並不像Visual Studio中集成的那樣。 – 2012-01-17 22:58:02

相關問題