2010-02-15 90 views
0

我正在使用我自己的數據庫和表單身份驗證。asp.net文件夾授權

數據庫包含一個帶有用戶的表格,第二個帶有角色的表格分配給用戶。

現在的問題是:如何準備web.config中的部分,因此它只允許屬於某個角色的用戶訪問該文件夾?

第二個問題: 使用IIS配置我可以阻止直接訪問Web目錄中的所有文件夾。比方說,其中一個頁面將包含允許從這些受保護的文件夾下載文件的鏈接。如果用戶被允許訪問該網站,他是否也可以下載該內容?

回答

1

這裏是一個示例web.config,如果您將該文件放在一個文件夾內(在您的Web項目結構中),您只希望允許具有「Admin」角色的用戶(例如),這將執行工作。

<?xml version="1.0"?> 

<configuration> 
    <appSettings/> 
    <connectionStrings/> 
    <system.web> 
     <authorization> 
      <allow roles="Admin"/> 
      <deny users="*"/> 
     </authorization> 
    </system.web> 
</configuration> 

爲了成功登錄後,該鏈接到您的安全,請您需要創建的FormsAuthenticationTicket,並通過在如用戶名和用戶角色的詳細信息。

一個簡單的例子顯示出這是:

FormsAuthenticationTicket myTicket = new FormsAuthenticationTicket(1, myUserName, DateTime.Now, DateTime.Now.AddMinutes(30), true, myUserRole, FormsAuthentication.FormsCookiePath); 
string hash = FormsAuthentication.Encrypt(myTicket); 
HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName, hash); 
Response.Cookies.Add(myCookie); 

這樣,你可以在你的代碼做到這一點:

if (Context.User.IsInRole("Admin")) { 
     // Do Something 
} else { 
     // Do Something Else 
} 

而且Web.config文件將工作,我上面詳述。在FormsAuthenticationTickets

更多的信息在這裏http://msdn.microsoft.com/en-us/library/system.web.security.formsauthenticationticket.aspx

+0

我知道。但是存在一個問題,即分配給用戶的角色存儲在我自己的數據庫/表中。有沒有辦法用web.config以某種方式連接該表? – Charly 2010-02-15 19:19:15

+0

答案已修改,以包含更多詳細信息請求 – 2010-02-15 19:26:11

+0

我已使用Cookie身份驗證。但是,糾正我,如果我錯了:元素「」中的web.config使用元素myUserRole中的cookie中存儲的數據? – Charly 2010-02-15 20:07:31

0

<appSettings/> 
<connectionStrings/> 
<system.web> 
    <authorization> 
     <allow roles="Admin"/> 
     <deny users="*"/> 
    </authorization> 
</system.web>