基于角色的控制器访问

时间:2013-03-20 20:54:41

标签: c# asp.net asp.net-mvc asp.net-mvc-4

我是新的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();
    }
}

我的代码是上面的代码,它完全没有意义,它不会像这样编译我无法用同一个名称来解决两个相同的方法。但有人可以指出我正确的方向。我应该如何基于他的角色向用户显示不同的页面。

3 个答案:

答案 0 :(得分: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");
        }
    }
}

答案 1 :(得分:2)

每个角色是否有不同的观点,或者只是根据角色想要拥有不同的标题?

你可以做的是将角色组合成一个Controller方法,然后在方法内部有条件逻辑,作为一个简单的例子:

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

答案 2 :(得分: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的视图