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

我的代码是上面的代码,它不会像这样编译是完全有道理的,我不能使用同名的两个相同的方法。但是有人可以指出我正确的方向。我应该如何根据用户的角色向用户显示不同的页面。

4

3 回答 3

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");
        }
    }
}
于 2013-03-20T21:05:29.683 回答
2

每个角色是否有不同的视图,或者只是您希望根据角色的不同而拥有不同的头衔?

您可以做的是将角色组合到单个 Controller 方法中,然后在该方法内部具有条件逻辑,例如:

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

        return View();
    }
}

如果您所做的只是更改标题。如果您想显示不同的视图或将它们重定向到其他地方,您可以这样做:

    [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");
        }
    }
于 2013-03-20T21:07:21.203 回答
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 的 View

于 2013-03-20T21:03:48.290 回答