#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 Я обновил свой пост, чтобы дать вам полный пример того, как вы можете настроить метод регистрации для поддержки добавления ролей. Свойство роли в модели представления также может быть строкой.