ASP MVC 5身份2:无法确定如何将自定义角色属性引用到用户

时间:2014-09-28 02:55:42

标签: asp.net-mvc asp.net-mvc-5 asp.net-identity role

我正在使用带有Identity 2的MVC 5.我创建了两个角色,一个用于管理员,一个用于供应商。我遇到的问题是注册表必须使用供应商角色中定义的属性。我无法弄清楚如何让MVC将这些角色属性用于注册目的。我已经尝试将相应的角色分配给applicationuser,但在为其分配角色后,它仍然表示它不存在。无论如何这样做,或者我将不得不将其拆分为两个注册屏幕(即一个用于处理初始用户创建,另一个用于处理角色特定实现)?

        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 Role字段添加到在第一个视图中创建的用户的位置。它现在出错了,并说我无法将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);**

更新:在我尝试更多代码之前,我显然需要更多地了解身份;有人可以告诉我,我的基本前提是否正确?:

我需要两个不同的用户:具有不同属性的供应商和管理员,我有一个用户类ApplicationUser,它带有Identity 2.我创建了具有不同属性的角色,我现在卡住了。我无法弄清楚如何将不同的角色引用到主用户类。根据我在.NET中的研究,用户只是登录,退出等实体。正确定义的角色应该允许您将角色附加到用户实例,从而创建必要的角色。

我希望我没有根据错误的前提进行数小时的编码......

1 个答案:

答案 0 :(得分:0)

这是因为在用户注册之前,他的用户尚未创建,因此他尚未存在的用户无法拥有角色。你应该有两个单独的视图,使用相同的模型和控制器,但你应该知道用户还不存在。