【问题标题】:How to add default role to Asp.net identity user manager如何将默认角色添加到 Asp.net 身份用户管理器
【发布时间】:2016-06-11 04:28:02
【问题描述】:

我是新手,正在探索 Asp.net 身份,我想为我的用户添加一个默认角色。但是,我在运行时未能运行此代码,它显示此错误“角色管理员不存在。”

 var userManager = new UserManager<IdentityUser>(userStore);
 var user = userManager.Find(UserName.Text, Password.Text);
 userManager.AddToRole(user.Id,"admin");

我知道我没有创建“管理员”角色,有没有最简单的方法来实现这个基于角色的授权?

【问题讨论】:

  • 是的,你使用if(RoleManager.RoleExists("RoleName")){RoleManager.Create(new IdentityRole{Name="RoleName"})}
  • @prospector 欣赏答案。但是,您介意提供有关 RoleManager 的更多详细信息吗?我 C&P 你的代码,我得到了这个错误“使用泛型类型'RoleManager'需要 2 个类型参数”。很抱歉给我带来了麻烦,因为我还是这个 API 的新手

标签: webforms asp.net-identity


【解决方案1】:

这里应该怎么做,先检查角色是否存在,如果不添加角色。

public async Task<ActionResult> Register(RegisterViewModel model, ApplicationDbContext context)
{
    if (ModelState.IsValid)
    {      
       var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
       var result = await UserManager.CreateAsync(user, model.Password);


       if (result.Succeeded)
            {
            var roleManager = new RoleManager<IdentityRole>(new RoleStore<IdentityRole>(context));

            if (!roleManager.RoleExists("Administrator"))
            {
                await roleManager.CreateAsync(new IdentityRole("Administrator"));

            }
            await UserManager.AddToRoleAsync(user.Id, "Administrator");
            await SignInManager.SignInAsync(user, isPersistent:false, rememberBrowser:false);

                return RedirectToAction("Index", "Home");
            }
            AddErrors(result);

    }

    // If we got this far, something failed, redisplay form
    return View(model);
}

注意 ApplicationDbContext 是如何在方法签名中传递的。

【讨论】:

  • 这是 MVC 的解决方案,而不是 WebForms
  • 无论如何方法里面的代码都是一样的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-05-16
  • 1970-01-01
  • 1970-01-01
  • 2016-02-11
  • 1970-01-01
  • 1970-01-01
  • 2020-01-24
相关资源
最近更新 更多