2013-10-10 80 views
0

我正在尋找一種根據用戶在MVC4應用程序中的角色來路由用戶的最佳方法。MVC4應用程序中的路由

基本上我有3種類型的用戶在我的應用

1)管理 2)員工 3)客戶

我怎樣才能做到這一點?

admin/home (for each admin request it starts with admin/{controller}....) 
staff/home (for each staff request it starts with staff/{controller}....) 
client/home (for each client request it starts with client/{controller}....) 

謝謝。

+0

類似的問題http://stackoverflow.com/questions/8181284/mvc-role-based-routing – Jared

+0

看起來我必須在我的應用程序中使用不同的區域。不是嗎?如果是這樣,我想知道是否有其他方式明確定義路線,而不是使用區域。但是如果可能的話,我不知道該怎麼做。 – user2866746

+0

那麼在某些時候,你將不得不認證用戶。因此,另一種選擇是在您的登錄控制器中根據其角色重定向它們。 – Jared

回答

0

3)有一個屬性可以將您的操作放在您的控制器中,因此您可以列出該特定操作允許的角色。您也可以創建自己的過濾器。

0

好的,這裏是我建議,做一個新的項目,並使用'互聯網模板'。開箱即用,他們爲您設置了一個登錄頁面,這將讓您瞭解如何在自己的應用程序中進行設置。

根據上面的設置,您需要編輯AccountController並在Login Post Action中添加這樣的內容。

if (User.IsInRole("Admin")) 
{ 
    return RedirectToAction("Home", "AdminController"); 
} 
if (User.IsInRole("Staff")) 
{ 
    return RedirectToAction("Home", "StaffController"); 
} 
if (User.IsInRole("Client")) 
{ 
    return RedirectToAction("Home", "ClientController"); 
} 

不要忘記將[Authorize(Roles = "RoleName")]屬性添加到四個控制器,或者如果他們登錄與否都不會有問題。

另外,看看http://www.asp.net/mvc他們有大量的資源來學習有關asp.net mvc。

+0

行了。但正如我所說我想請求的網址應該是(管理員/ ...)。那麼,我必須在AdminController中進行所有操作?我不能製造更多的控制器嗎?我猜,如果我創建單獨的控制器,那麼請求url將不會像我想要的那樣。 – user2866746

+0

路由開箱即用的方式是/ {controller}/{action},因此當您重定向到AdminController時,URL將爲/ Admin/Home。我真的鼓勵你瀏覽一下asp.net網站上的信息。 – Jared