ASP MVC 5 Identity 2: Невозможно определить, как ссылаться на свойства настраиваемой роли для пользователя

Я использую 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, пользователь - это просто объект, который входит в систему, выходит из нее и т. Д. Правильно определенные роли должны позволять вам прикреплять роли к экземпляру пользователя, тем самым создавая необходимую роль.

Надеюсь, я не потратил часы на кодирование на основе ошибочной предпосылки ...


person Rasen244    schedule 28.09.2014    source источник
comment
Если кто-нибудь знает, где я могу найти ресурсы о добавлении атрибутов к пользователю идентификации 2 с помощью ролей; Буду признателен за помощь.   -  person Rasen244    schedule 29.09.2014


Ответы (1)


Это связано с тем, что до того, как пользователь зарегистрируется, его пользователь еще не создан, поэтому его еще не существующий пользователь не может иметь роль. У вас должно быть два отдельных представления, использующих одни и те же модели и контроллеры, но вы должны знать, что пользователь еще не существует.

person Lajos Arpad    schedule 28.09.2014
comment
Я знаю, что это решение, мне просто интересно, знает ли кто-нибудь способ сделать все это на одной странице регистрации. - person Rasen244; 28.09.2014
comment
Это возможно, но беспорядочно. Я не рекомендую это. - person Lajos Arpad; 28.09.2014
comment
Есть идеи, что я пропустил, что вызывает новую ошибку? - person Rasen244; 29.09.2014