Я использую MVC 5 с Identity 2. Я создал две роли: одну для администраторов и одну для поставщиков. У меня проблема в том, что регистрационная форма должна использовать свойства, определенные в роли поставщика. Я не могу понять, как заставить MVC использовать эти свойства роли для целей регистрации. Я попытался назначить соответствующую роль пользователю приложения, но после назначения ему роли он по-прежнему говорит, что ее не существует. Есть ли способ сделать это, или мне придется разделить это на два экрана регистров (то есть один для обработки первоначального создания пользователя, а второй для обработки реализации конкретной роли)?
public async Task<ActionResult> Register(RegisterVendorViewModel model)
{
if (ModelState.IsValid)
{
var user = new ApplicationUser
{
UserName = model.Email,
Email = model.Email,
FirstName = model.FirstName,
LastName = model.LastName,
PhoneNumber = model.PhoneNumber,
CompanyName = model.CompanyName,
Address = model.Address,
City = model.City,
State = model.State,
PostalCode = model.PostalCode
};
var result = await UserManager.CreateAsync(user, model.Password);
if (result.Succeeded)
ОБНОВЛЕНИЕ: я разделяю представления, первое представление касается исключительно создания пользователя приложения, а второе представление - это то место, где я добавляю поля роли VendorUser для пользователя, созданного в первом представлении. Теперь он сообщает об ошибке и говорит, что я не могу добавить атрибуты VendorUserRole в IdentityUserRole.
Код ошибки «Ошибка 2, аргумент 1: невозможно преобразовать из« Project1.Models.VendorUserRole »в« Microsoft.AspNet.Identity.EntityFramework.IdentityUserRole »»
Мне явно не удалось что-то обновить или переопределить в реализации моих ролей. Кто-нибудь знает, где это можно исправить? Я думал, что переделал их все, чтобы они работали правильно.
// POST: /Account/RegisterP2
[HttpPost]
[AllowAnonymous]
[ValidateAntiForgeryToken]
public async Task<ActionResult> RegisterP2([Bind(Include = "Id")]RegisterPart2ViewModel model)
{
if (ModelState.IsValid)
{
var vendorUser = new VendorUserRole()
{
Id = model.Id,
CompanyName = model.CompanyName,
Title = model.Title,
Address = model.Address,
City = model.City,
State = model.State,
PostalCode = model.PostalCode,
};
var user = await UserManager.FindByIdAsync(vendorUser.Id);
**user.Roles.Add(vendorUser);**
ОБНОВЛЕНИЕ: мне явно нужно больше понимания Identity, прежде чем я попробую еще какой-либо код; может кто-нибудь сказать мне, верна ли моя основная посылка ?:
Мне нужны два разных пользователя: поставщики и администраторы с разными свойствами, у меня есть один пользовательский класс ApplicationUser, который поставляется с Identity 2. Я создал роли с разными свойствами для каждого и теперь застрял. Я не могу понять, как связать разные роли с основным классом пользователей. Согласно моим исследованиям в .NET, пользователь - это просто объект, который входит в систему, выходит из нее и т. Д. Правильно определенные роли должны позволять вам прикреплять роли к экземпляру пользователя, тем самым создавая необходимую роль.
Надеюсь, я не потратил часы на кодирование на основе ошибочной предпосылки ...