asp.net Core MVC 6授权用户的不同主页

时间:2016-05-23 03:55:58

标签: asp.net-mvc asp.net-core asp.net-core-mvc

我有一个Identity 3.0项目。我已经设置了一个动态菜单,该菜单也有效,并根据您所处的角色显示不同的菜单列表。

我希望授权用户拥有不同的主页。如果您是UnAuthorized,您应该看到" / Home / Index"按照正常情况。

如果您是授权用户(以用户身份登录并且记得您...),您应始终被定向到授权用户的其他主页...说&#34; /计划/索引&#34;。< / p>

我已经设置了AuthorizeFilter

           services.AddMvc(setup =>
        {
            setup.Filters.Add(new AuthorizeFilter(defaultPolicy));
        });

因此,除非您获得授权,否则如果您尝试访问任何控制器而没有以下内容,您将被发送到登录页面:

[AllowAnonymous]

一开始......例如HomeController在开始就有这个......

我在Stackoverflow上找到this并在StartUp类中尝试了它,但它不起作用。

            services.Configure<CookieAuthenticationOptions>(options =>
        {
            options.LoginPath = new PathString("/Scheduler/Index");
        });

我如何拥有两个不同的主页,具体取决于用户是否已登录?

1 个答案:

答案 0 :(得分:3)

你有(至少)两种方式:

1)从“索引”操作中返回不同的视图名称(取决于用户状态):

[AllowAnonymous]
public IActionResult Index()
{
     // code for both (anonymous and authorized) users
     ...

     var shouldShowOtherHomePage = ... // check anything you want, even specific roles
     return View(shouldShowOtherHomePage ? "AuthorizedIndex" ? "Index", myModel);
}

如果您的Index方法没有“重”逻辑,对于匿名/授权用户不同,并且您在一个方法中不会有两个“分支”代码,那么这个很好。

2)将授权用户从Index重定向到其他操作

[AllowAnonymous]
public IActionResult Index()
{
    var shouldShowOtherHomePage = ...
    if (shouldShowOtherHomePage) 
    {
        return RedirectToAction("AuthorizedIndex", "OtherController");
    }

    // code for anonymous users
    ....
}

如果您不想在一个方法中混合两个逻辑流,或者您的操作位于不同的控制器中,请使用此选项。