2009-05-24 57 views
1

在C#中使用MVC,我想編寫一個通用工具或類,其中如果某個特定條件失敗,需要重定向到登錄頁面。在會話檢查的某些情況下重定向到登錄頁面

例如:當用戶登錄到網站時,userid將被添加到會話中。要訪問「ManageUsers」頁面,用戶應該以管理員身份登錄,否則我需要重定向到登錄頁面。我還需要在其他一些類似的頁面中檢查這種情況。我不想在登錄時檢查用戶是admin還是普通用戶。我需要在普通課上檢查這個。

任何建議?

回答

1

其實我覺得這不是一個應用程序特別好行爲。我認爲你應該禁用(或隱藏)用戶無法執行的任何操作。在用戶手動輸入URL或從他們有權限使用書籤的情況下,顯示錯誤消息而不是重定向到登錄頁面。

想象一下,您是登錄到您的應用程序的用戶。你點擊一個用戶界面元素,它看起來像你已經註銷。你無法知道你不應該使用它。禁用/隱藏元素可以防止大多數用戶出現這種情況。重定向到錯誤會向用戶提供有價值的反饋,說明爲什麼他們採取的措施沒有達到預期的效果。

我使用派生自AuthorizeAttribute的自定義屬性來實現此效果。如果用戶未登錄,它將重定向到登錄頁面。如果他們已登錄,但沒有足夠的權限,則顯示適當的錯誤視圖。

1

這已經存在於ASP.NET MVC與授權屬性:

[Authorize(Roles="Administrators")] 
public AcitonResult ManageUsers() { 

return View(); 

} 

或者

[Authorize(Users="Admin,SomeUser")] 
public AcitonResult ManageUsers() { 

    return View(); 

} 

更多的相關信息:
http://www.asp.net/learn/mvc/tutorial-17-vb.aspx

+0

我必須根據控制器和操作(即頁面)檢查普通類中的條件並將用戶重定向到登錄。 它不僅是基於角色的檢查。我也必須檢查一些更多的條件,如字符串平等檢查(UserName ==「Prasad」)。 – Prasad 2009-05-24 13:31:49

1
[Authorize(Roles = "Admin")] 
public ActionResult ManageUsersController() 
{ 
    ... 
} 

在你的web.config檢查:

... 
<forms loginUrl="~/your_login_page" defaultUrl="~/"> 
... 

你也應該設置兩個的MembershipProvider和RoleProvider在你的web.config

相關問題