根据用户的身份角色重定向用户 - ASP MVC 4和5

时间:2016-03-11 10:03:15

标签: asp.net asp.net-mvc asp.net-mvc-4 asp.net-identity-2

您好我有一个使用MVC 5身份角色的ASP MVC应用程序,为了简单起见,我有2个身份角色(“管理员”和“员工”)。 Role Admin中的用户可以访问管理面板,他们可以在其中创建其他用户,而“员工角色”中的用户只能访问“员工视图”。 我将用户分配给角色并将[授权]应用于控制器没有问题。

我希望在成功登录后将用户用户重定向到他们的相对视图,因此如果用户处于管理员角色,则会自动将其重定向到管理面板或视图以及员工页面中的用户是否重定向到员工视图。

如何在登录控制器中应用此功能?谢谢

4 个答案:

答案 0 :(得分:3)

如果您在Controller中使用UserManager和SignInManager(根据默认模板):

[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> SignIn(SignInViewModel model)
{
    if (!ModelState.IsValid)
    {
        return View(model);
    }

    var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: true);
    switch (result)
    {
        case SignInStatus.Success:
            ApplicationUser user = await UserManager.FindAsync(model.Email, model.Password);
            // Redirect to User landing page on SignIn, according to Role
            if ((UserManager.IsInRole(user.Id, "User")))
            {
                return RedirectToAction("Index", "User");
            }
            if ((UserManager.IsInRole(user.Id, "Administrator")))
            {
                return RedirectToAction("Index", "Administrator");
            }
            return View(model);
        // etc below - code to taste
        case SignInStatus.LockedOut:
            return View(model);
        case SignInStatus.RequiresVerification:
            return View(model);
        case SignInStatus.Failure:
        default:
            return View(model);
    }
}

答案 1 :(得分:0)

您只需从登录操作方法重定向它们即可。所以伪代码就像下面一样。

            if (User.Role == "Admin")
            {
                //send him to Admin controller and index action
                return RedirectToAction("ActionName","Controllername"); 
            }
            else if (User.Role == "Staff")
            {
                //send him to staff controller and index action
                return RedirectToAction("ActionName","Controllername"); 
            }
            else
            { 
               // if neither role show default public page
               return RedirectToAction("ActionName","Controllername");
            }

这些评论只是为了给你一个想法,它可能会因你的申请而有所不同

答案 2 :(得分:0)

if(UserType.Admin)
{
            return RedirectToAction("HomeAdmin","Admin") // Admin Home
}
else if(UserType.Staff)
{
            return RedirectToAction("HomeStaff","Staff")//Staff Home
}

并在你的行动方法

[Authorize]// Use this to authorize
public ActionResult HomeStaff()
{
}

答案 3 :(得分:0)

[我是如何解决的,我没有找到上述解决方案中所述的任何UserType或User.Role]