1

私は新しいasp.netとasp.netMVCにいます。ユーザーの役割に応じて、ユーザーにページを表示しようとしています。

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

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

私のコードは上記のものです。このようにコンパイルされないことは完全に理にかなっています。同じ名前の2つの同じメソッドを洞窟に入れることはできません。しかし、誰かが私を正しい方向に向けてくれませんか。ユーザーの役割に基づいて、ユーザーに別のページを表示するにはどうすればよいですか。

4

3 に答える 3

4

それらが2つの別個のアクションでなければならない場合は、次のように、役割に応じて名前を付ける方が理にかなっています。

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

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

それらを1つにまとめることができる場合は、次のことができます。

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

役割ごとに異なる見解がありますか、それとも役割に応じて異なるタイトルを付けたいだけですか?

単純な例として、ロールを1つの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というビューを作成する必要があります

于 2013-03-20T21:03:48.290 に答える