2011-06-17 37 views
1

學習mvc並構建一個完整的電子商務應用程序。關於如何組織控制器的建議asp.net mvc3

管理員應該能夠添加任何他們喜歡的編輯。

讓我們舉一個例子Employees。

我已經添加了一個名爲「Admin」的區域.Winin admin我有員工 在這裏,管理員應該能夠添加編輯有關員工的信息。

現在在用戶部分,用戶不應該能夠添加,edit.etc ..

他們一刻,我有2個控制器?

  1. 領域 - 管理 - 控制器 - EmployeeController
  2. 領域 - 關於我們的控制器 - EmployeeController

它似乎沒有權利me.How你怎樣對待這樣的代碼重複? 我想只有一個controller.How你在這種情況下構建你的mvc應用程序?

任何我可以下載的例子? 尋找一個很好的例子,你可以看到地區工作和動態等運行主題..

感謝您的任何建議

回答

1

你可以使用一個單一的~/Controllers/EmployeesController控制器來處理在應用程序中Employee資源。裏面涉及行政(或在用戶登錄一些)權限此控制器的行動可能與[Authorize]屬性由順序指定所需的角色來執行這個動作被裝飾:

public class EmployeesController: Controller 
{ 
    // Anyone can list employees, even anonymous users 
    public ActionResult Index() 
    { 
     IEnumerable<Employee> employees = _repository.GetEmployees(); 
     return View(employees); 
    } 

    public ActionResult Show(int employeeId) 
    { 
     Employee employee = _repository.GetEmployee(employeeId); 
     return View(employee); 
    } 


    // Only administrators can update employees 
    [Authorize(Roles = "admin")] 
    [HttpPost] 
    public ActionResult Update(Employee employee) 
    { 
     _repository.Update(employee); 
     return RedirectToAction("Index"); 
    } 

    // Only administrators can delete employees 
    [HttpDelete] 
    [Authorize(Roles = "admin")] 
    public ActionResult Destroy(int employeeId) 
    { 
     _repository.Delete(employeeId); 
     return RedirectToAction("Index"); 
    } 

    ... and some other actions following the Simply RESTful pattern: 
    http://mvccontrib.codeplex.com/wikipage?title=SimplyRestfulRouting 
} 
+0

感謝您reply.Do你的意思是在不中地區的主要控制器創建EmployeeController再穿上那些需要admin.Is這你的意思的方法的授權屬性?你也可以在視圖中隱藏「添加 - 編輯 - 刪除」,如果不是adminRole。當查看列表我想要隱藏上面的鏈接,如果不是admin.Is有@If AdminRole {etc ..} – user9969 2011-06-17 13:00:24

+0

@ user231465,是的,這正是我的意思。就隱藏鏈接而言,這完全有可能。您可以在您的視圖模型上定義布爾屬性,指示是否應該顯示某個鏈接,並在您的控制器內部通過User.IsInRole(「admin」)`操作此屬性。我見過人們直接在他們的視圖中使用@if(User.IsInRole(「admin」)){...}「,但我個人更喜歡在控制器中執行此操作,並將信息傳遞給視圖模型中的視圖。因此,在視圖中:`@if(Model.ShouldShowSomeLinks){...}` – 2011-06-17 13:03:31

1

我assumuing你做這種方式所以你可以使用身份驗證,並有漂亮的網址: /Admin/Employee /Aboutus/Employee

如何在/ Controllers/EmployeeController中只有一個控制器。您可以在任何需要驗證的方法上設置[Authorize]屬性,並使用自定義路由來控制url?

routes.MapRoute(_ 
     "Admin_Employee", _ 
     "Admin/{controller}/{action}/{id}", _ 
     New With {.controller = "Employee", .action = "Index", .id = UrlParameter.Optional} _ 
    ) 

    routes.MapRoute(_ 
     "AboutUs_Employee", _ 
     "Aboutus/{controller}/{action}/{id}", _ 
     New With {.controller = "Employee", .action = "Details", .id = UrlParameter.Optional} _ 
    ) 
相關問題