基于角色的控制器访问

问题描述:

我对新的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具有相同名称的方法。但是,有人可以请我指出正确的方向。我应该如何根据他的角色向用户显示不同的页面。

如果他们必须是两个单独的操作视图,那么它更有意义,根据角色他们的名字,像这样:

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

在操作中对用户是否在角色中进行测试,并返回不同的视图或重定向到不同的操作。

你可以尝试这样的:

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

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

需要创建一个名为IndexReviwer

对于每个角色是否有不同的看法,还是仅仅根据角色您想拥有不同的标题?

你可以做什么角色合并到单个控制器的方法,然后在方法内部具有条件逻辑,作为一个简单的例子:

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"); 
     } 
    }