基于角色的控制器访问
问题描述:
我对新的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");
}
}
}
答
在操作中对用户是否在角色中进行测试,并返回不同的视图或重定向到不同的操作。
你可以尝试这样的:
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");
}
}
使我比我想要的更有意义。谢谢 – trebor 2013-03-20 21:09:31