2013-03-20 142 views
1

我對新的asp.net和asp.net MVC。我試圖向用戶展示一個頁面取決於角色的衣服。基於角色的控制器訪問

public class HomeController : Controller 
{ 
    [Authorize(Roles = "Reviewer")] 
    public ActionResult Index() 
    { 
     ViewBag.Title = "Reviwer"; 
     return View(); 
    } 

    [Authorize(Roles="User")] 
    public ActionResult Index() 
    { 
     return View(); 
    } 
} 

我的代碼是上面的一個,它非常有意義,它不會編譯這樣,我不能洞穴2個idendical具有相同名稱的方法。但是,有人可以請我指出正確的方向。我應該如何根據他的角色向用戶顯示不同的頁面。

回答

4

如果他們必須是兩個單獨的操作視圖,那麼它更有意義,根據角色他們的名字,像這樣:

public class HomeController : Controller 
{ 
    [Authorize(Roles = "Reviewer")] 
    public ActionResult Reviewer() 
    { 
     ViewBag.Title = "Reviewer"; 
     return View(); 
    } 

    [Authorize(Roles="User")] 
    public ActionResult User() 
    { 
     return View(); 
    } 
} 

如果你可以讓他們爲一體,你可以這樣做:

public class HomeController : Controller 
{ 
    [Authorize(Roles = "Reviewer", "User")] 
    public ActionResult Index() 
    { 
     if (User.IsInRole("Reviewer")) 
     { 
      return View("Reviewer"); 
     } 
     else 
     { 
      return View("User"); 
     } 
    } 
} 
+0

使我比我想要的更有意義。謝謝 – trebor 2013-03-20 21:09:31

1

在操作中對用戶是否在角色中進行測試,並返回不同的視圖或重定向到不同的操作。

你可以嘗試這樣的:

public class HomeController : Controller 
{ 
    [Authorize(Roles = "Reviewer,User")] 
    public ActionResult Index() 
    { 
    if (User.IsInRole("Reviewer")){ 

      ViewBag.Title = "Reviwer"; 
      return View("IndexReviwer"); 
    } 
    return View(); 
    } 
} 

需要創建一個名爲IndexReviwer

2

對於每個角色是否有不同的看法,還是僅僅根據角色您想擁有不同的標題?

你可以做什麼角色合併到單個控制器的方法,然後在方法內部具有條件邏輯,作爲一個簡單的例子:

public class HomeController : Controller 
{ 
    [Authorize(Roles = "Reviewer, User")] 
    public ActionResult Index() 
    { 
     if (Roles.IsUserInRole("Reviewer")) 
     { 
      ViewBag.Title = "Reviwer"; 
     } 

     return View(); 
    } 
} 

如果你正在做的是改變的稱號。如果你想顯示不同的視圖或redirect他們在其他地方你可以做:

[Authorize(Roles = "Reviewer, User")] 
    public ActionResult Index() 
    { 
     if (Roles.IsUserInRole("Reviewer")) 
     { 
      return View("ReviewerView"); 
     } 
     else if (Roles.IsUserInRole("User")) 
     { 
      //Or do a RedirectToAction("SomeAction") 
      return View("UserView"); 
     } 
    }