2011-11-01 17 views
2

我正在MVC 3中構建一個網上商店。它使用默認的會員提供商進行結帳,因此用戶應該先註冊/登錄,然後才能進行購買。這工作正常。現在我正在構建一個管理區域來管理表單上使用的所有產品,類別和所有下拉值。爲此,管理員需要登錄。最好是我想使用相同的成員資格提供程序。對此最佳做法是什麼?我試圖把一個單獨的AccountController和意見在管理區域,但是當我瀏覽到... /管理它會將我路由到網上商店頁面上的日誌而不是管理區域。可以在項目的根目錄中只使用1個AccountController,然後評估RouteData並從Admin區域視圖返回正確的登錄視圖?或者這是'未完成'。如何在兩個區域使用一個默認會員供應商?

我想要做到最好,最乾淨的方式。

感謝名單

回答

3

有沒有必要使用兩個帳戶控制器,畢竟他們有相同的邏輯。

您可以使用角色提供程序並根據角色設置對區域的訪問權限。

[Authorize(Roles = "Administrators")] 
public class AdminController : Controller 
{ 
} 

編輯:

爲了使用不同的佈局,您的管理區域的_ViewStart.cshtml內或聯繫地區AccountController使用視圖中,您需要設置其佈局你會使用:

@{ 
    Layout = "~/Areas/Admin/Views/Shared/_AdminLayout.cshtml"; 
} 

至於重定向,檢查你的路由裏面AdminAreaRegistration.cs,並確保您要重定向到的區域控制器:

return RedirectToAction("LogOn", "Admin", new { area = "Admin" }); 
+0

我已經在使用「授權」屬性。問題是登錄在結帳和管理區域中的登錄有不同的重定向或RedirectToAction。此外,登錄必須爲這兩個登錄使用不同的佈局。我希望這有點清楚。 –

+0

實際上,即使在登錄後重定向之前,也會出現真正的問題。當我輸入URL'http://..../admin'時,它會轉移到我的根帳戶控制器的登錄操作,而不是Admin \ Controllers \ AccountController.cs中的登錄操作。 當我刪除[Authorize]屬性時,我的Amin區域中的路由將我轉移到Admin \ Home \ index,以便在管理區域中正確設置路由。我如何告訴我的項目Admin將需要在Admin \ Controllers的AccountController。佈局問題,我可以用你之前答案中的信息解決。爲此。 –

+0

這是因爲您未登錄,因此它重定向到web.config中指定的登錄頁面。據我所知,只有一個loginurl可以指定用於重定向用戶登錄頁面,如果他還沒有登錄。我看到兩種方法可以解決這個問題:實現自定義授權屬性,將做適當的重定向或實現一個屬性,將根據角色更新佈局(這意味着一個帳戶控制器和一個視圖,但兩個佈局)。 – frennky