使用 ASPNET 标识在登录期间检查用户的角色



我正在开发asp.net应用程序。我有一个包含4个角色的netroles表:

**Id    Name**
1   Admin
4   Consumer
2   Provider
3   SaleUser

在AccountController注册操作方法中,我添加了以下内容:

 var user = new ApplicationUser { UserName = model.Email, Email = model.Email};
                var result = await UserManager.CreateAsync(user, model.Password);
                **UserManager.AddToRole(user.Id, model.UserRole);**

现在我在登录时检查登录操作结果如下:

我看到aspnetusers和aspnetuseroles表有正确的数据。

var result = await SignInManager.PasswordSignInAsync(model.Email, model.Password, model.RememberMe, shouldLockout: false);

   if (User.IsInRole(model.UserRole))
                            return RedirectToLocal(returnUrl);

但条件失败。如何检查用户是否属于特定角色。

我在Startup.cs ConfigureAuth方法中添加了以下行:

 app.CreatePerOwinContext<ApplicationRoleManager>(ApplicationRoleManager.Create);

和identityConfig类中的这个类:

 public class ApplicationRoleManager : RoleManager<IdentityRole>
    {
        public ApplicationRoleManager(IRoleStore<IdentityRole, string> store) : base(store)
        {
        }
        public static ApplicationRoleManager Create(IdentityFactoryOptions<ApplicationRoleManager> options, IOwinContext context)
        {
            var roleStore = new RoleStore<IdentityRole>(context.Get<ApplicationDbContext>());
            return new ApplicationRoleManager(roleStore);
        }
    }

账户控制器中的代码:

  private ApplicationRoleManager roleManager;
        public ApplicationRoleManager RoleManager
        {
            get
            {
                return this.roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
            }
            private set { this.roleManager = value; }
        }

但问题仍然相同

更新

var user = new ClaimsPrincipal(AuthenticationManager.AuthenticationResponseGrant.Identity);
if (User.IsInRole(model.UserRole))
    return RedirectToLocal(returnUrl);
else
{
    AuthenticationManager.AuthenticationResponseGrant = null;
    model.Roles = GetRoles();
    ModelState.AddModelError("", "You cannot login as " + model.UserRole);
    return View(model);
}

请尝试此

if (result == SignInStatus.Success)
{
    var user = new ClaimsPrincipal(AuthenticationManager.AuthenticationResponseGrant.Identity);
    if (user.IsInRole(model.UserRole))
    {     
         return RedirectToLocal(returnUrl);
    }
    else
    {
        AuthenticationManager.AuthenticationResponseGrant = null;
        model.Roles = GetRoles();
        ModelState.AddModelError("", "You cannot login as " + model.UserRole);
        return View(model);
    }
}
ModelState.AddModelError("", "Invalid login attempt.");
return View(model);

问题是User是根据您发送到浏览器的cookie创建的,但此时您还没有发送这些cookie。

最新更新