2011-08-23 56 views
0

我用我的asp.net應用程序的Windows身份驗證簡單的web.config文件的問題asp.net

不同的用戶將擁有該網站的部分不同的訪問。

我願做這樣的事情在配置文件:

<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

使用<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> 
+0

謝謝,我在哪裏指定該網站的哪些部分屬於? –

+0

具有'path'屬性。 –

+0

非常感謝您能幫助這個:http://serverfault.com/questions/304166/does-iis-server-have-tobe -on域換窗戶,認證和角色 –

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 webforms,那麼它有點難以理解;在每個頁面/控件中,您需要找出當前用戶,然後確定該用戶是否有權訪問然後重定向或繼續。

如果您使用ASP.Net MVC,它會更清晰,因爲您使用屬性進行此操作。

​​

有什麼代碼在做,是說如果用戶沒有管理員角色,不要給他們訪問。

爲了提供一個相反的例子,這是一個使用Web表單類似的方法(MSDN例子):

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

+0

非常感謝。能夠做角色,我將不得不通過瘋狂的箍來讓它工作? –

+0

請解釋downvote;我已經說明了OP詢問的方法存在的問題,並提供了兩種解決問題的方法。 –

+0

不,沒有,角色身份驗證是好的 - 問題是通過AppSettings。我提供的MSDN鏈接顯示瞭如何執行角色身份驗證,您只需制定一種存儲方法,將您的訪問權與所報告的角色相關聯即可。 –