如何在.net核心中注册角色使用?

时间:2018-05-04 10:52:32

标签: asp.net-core entity-framework-6

我想创建一个具有角色的新用户。我正在使用实体迁移。所以我得到所有默认表。没有角色我可以注册一个新用户,但是当我添加角色下拉时,我面临一个错误无法从字符串转换为ourproject.entitites.user

请帮助并教我错误的地方。我是.net核心技术的新手。

我遇到了user.Id

的问题
await _userManager.AddToRoleAsync(user.Id, model.UserRoles);

ControllerCode:

[HttpPost, ValidateAntiForgeryToken]
        public async Task<IActionResult> Register(RegisterUserModel model)
        {
            if (ModelState.IsValid)
            {
                var user = new User { UserName = model.Username, Email = model.Email,
                    PhoneNumber = model.PhoneNumber };
                //var phoneNo = new User { PhoneNumber = model.PhoneNumber };
                var createResult = await _userManager.CreateAsync(user, model.Password);

                if (createResult.Succeeded)
                {                    
                    await _userManager.AddToRoleAsync(user.Id, model.UserRoles);
                    return RedirectToAction("Details", "Home");                    
                }
                else
                {
                    ViewBag.Name = new SelectList(_Context.Roles.Where(u => !u.Name.Contains("Admin"))
                                          .ToList(), "Name", "Name");
                    foreach (var error in createResult.Errors)
                    {
                        ModelState.AddModelError("", error.Description);
                    }
                }
            }
            return View();
        }

Registermodel代码:

 public class RegisterUserModel
    {
        [Required,MaxLength(256)]
        public string Username { get; set; }

        [Required, DataType(DataType.Password)]
        public string Password { get; set; }

        [Required, DataType(DataType.Password), Compare(nameof(Password))]
        public string ConfirmPassword { get; set; }

        [Required, DataType(DataType.EmailAddress),MaxLength(256)]
        public string Email { get; set; }

        [Required,DataType(DataType.PhoneNumber)]
        public string PhoneNumber { get; set; }

        [Display(Name ="UserRoles")]
        public string UserRoles { get; set; }

    }

用户实体代码:

使用Microsoft.AspNetCore.Identity;

namespace OurProject.Entities
{
    public class User : IdentityUser
    {        
    }
}

1 个答案:

答案 0 :(得分:0)

这是.net core 2.0的功能代码。在AddToRoleAsync方法中,我发送用户对象。

    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public async Task<IActionResult> Register(RegisterViewModel model, string returnUrl = null)
    {
        ViewData["ReturnUrl"] = returnUrl;
        if (ModelState.IsValid)
        {
            var user = new ApplicationUser { UserName = model.Email, Email = model.Email };
            var result = await _userManager.CreateAsync(user, model.Password);
            if (result.Succeeded)
            {
                string roleName = "Manager";
                var isExistRole = await this._roleManager.RoleExistsAsync(roleName);

                if (!isExistRole)
                {
                    await this._roleManager.CreateAsync(                            
                        new IdentityRole
                    {
                        Id = Guid.NewGuid().ToString(),
                        Name = roleName
                    });
                }

                await _userManager.AddToRoleAsync(user, roleName);

                return RedirectToLocal(returnUrl);
            }
            AddErrors(result);
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }
相关问题