Отдельные учетные записи Web API: как добавлять роли

#c# #.net #asp.net-mvc #entity-framework #asp.net-web-api

#c# #.net #asp.net-mvc #entity-framework #asp.net-web-api

Вопрос:

в ASP Web API я использую отдельные учетные записи для регистрации пользователя. Я реализовал эту функциональность, следуя этому официальному руководству:

Отдельные учетные записи Web API

Теперь я хочу иметь возможность назначать роль пользователю: когда выполняется метод Register, я хочу также передать роль в запросе POST:

 {
   "UserName": "Alice",
   "Password": "password123",
   "ConfirmPassword": "password123",
   "Role": "admin"                  -> i want add this
}
 

и метод Register должен правильно оценивать таблицу базы данных.
Как я могу обрабатывать роли в отдельных учетных записях web api? Есть какой-нибудь учебник?

Спасибо

Ответ №1:

Просто добавьте следующую строку в свой код после создания пользователя и соответствующей роли

 var roleresult = UserManager.AddToRole(currentUser.Id, "RoleName");
 

Вы также должны добавить свойство Role в свою модель представления (обычно оно называется RegisterBindingModel), которое передается методу Register .

Обновить

Вот полный пример того, как может выглядеть метод Register (RoleEntity и UserEntity — это мои реализации соответствующих классов в Identity, но это также будет работать с вашей пользовательской реализацией)

 public async Task<IdentityResult> RegisterAsync(RegisterViewModel model)
{
    var user = new UserEntity { UserName = model.UserName };
    var role = model.Role.ToString();

    if (await _roleManager.FindByNameAsync(role) == null)
    {
        var roleResult = await _roleManager.CreateAsync(new RoleEntity(role));

        if (roleResult != IdentityResult.Success)
        {
            return roleResu<
        }
    }

    var result = await _userManager.CreateAsync(user, model.Password);

    if (!result.Succeeded)
    {
        return resu<
    }

    var addToRoleResult = await _userManager.AddToRoleAsync(user.Id, role);

    return !addToRoleResult.Succeeded ? addToRoleResult : IdentityResult.Success;
}
 

Моя модель RegisterViewModel выглядит примерно так

 public class RegisterViewModel
{
    [Required(ErrorMessage="This field is required")]
    [Display(Name = "User name", Prompt="Please enter user name...")]
    public string UserName { get; set; }

    [Required(ErrorMessage = "This field is required")]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password", Prompt="Please enter password...")]
    public string Password { get; set; }

    [DataType(DataType.Password)]
    [Display(Name = "Confirm password", Prompt = "Please enter confirm password...")]
    [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")]
    public string ConfirmPassword { get; set; }

    [Required(ErrorMessage = "This field is required")]
    [Display(Name = "Role")]
    public Roles Role { get; set; }
}
 

Комментарии:

1. Есть какое-либо руководство или книга, где я могу документировать этот аргумент?

2. В официальной документации не хватает большого количества информации. Лучшими ресурсами являются блоги Брока Аллена и Скотта Аллена .

3. @Tom Я обновил свой пост, чтобы дать вам полный пример того, как вы можете настроить метод регистрации для поддержки добавления ролей. Свойство роли в модели представления также может быть строкой.