2016-06-10 4 views
0

Я новичок и изучаю идентификатор Asp.net, я хотел добавить роль по умолчанию для своих пользователей. Тем не менее, мне не удалось запустить этот код во время выполнения, и он показывает мне эту ошибку «Роль администратора не существует».Как добавить роль по умолчанию для диспетчера идентификации пользователя Asp.net

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

Я знаю, что я не создал роли «администратор», есть ли ли Простейшее способ реализации этой роли на основе авторизации?

+0

Да, вы используете 'if (RoleManager.RoleExists (" RoleName ")) {RoleManager.Create (новый IdentityRole {Name =" RoleName "})}' – prospector

+0

@prospector Оцените ответ. Однако не могли бы вы более подробно рассказать о RoleManager? Я C & P ваш код, и я получил это Ошибка «Использование родового типа» RoleManager «требует 2 аргументов типа». Извините за проблему, так как я все еще новичок в этом API. – hiboss

ответ

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 передается в сигнатуре метода.

+0

Это решение для MVC, а не для WebForms. – CodeLocked

+1

Код внутри метода будет одинаковым. – prospector

Смежные вопросы