使用用户管理器之用户管理
一、建立模型
1、在Models文件夹上点右键 》添加》类 类的名称自定,我用AdminViewModels命名的。
2、更改模板自建的AdminViewModels类为RoleViewModel,并添加EditUserViewModel类,代码完成如下:
1 public class RoleViewModel 2 { 3 public string Id { get; set; } 4 [Required(AllowEmptyStrings = false)] 5 [Display(Name = "角色名称")] 6 public string Name { get; set; } 7 } 8 9 public class EditUserViewModel 10 { 11 public string Id { get; set; } 12 13 [Required(AllowEmptyStrings = false)] 14 [Display(Name = "电邮地址")] 15 [EmailAddress] 16 public string Email { get; set; } 17 18 public IEnumerable<SelectListItem> RolesList { get; set; } 19 }
为保证代码简洁,删除不必要的using。
二、建立控制器UsersAdminController
1、在controllers文件夹上点右键》添加》控制器, 我这里选的是“MVC5 控制器-空”,名称设置为:UsersAdminController.cs
2、添加操作权限。在空间命名下第一个{下面(9行)添加[Authorize(Roles = "Admin")]用以此控制器操作只有admin角色组有权限访问。如果你选择了之前的可选操作这里可以直接添加权限,否则要么改,要么先注释掉。
3、在public class UsersAdminController : Controller内添加如下代码:
1 public UsersAdminController() 2 { 3 } 4 5 public UsersAdminController(ApplicationUserManager userManager, ApplicationRoleManager roleManager) 6 { 7 UserManager = userManager; 8 RoleManager = roleManager; 9 } 10 11 private ApplicationUserManager _userManager; 12 public ApplicationUserManager UserManager 13 { 14 get 15 { 16 return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>(); 17 } 18 private set 19 { 20 _userManager = value; 21 } 22 } 23 24 private ApplicationRoleManager _roleManager; 25 public ApplicationRoleManager RoleManager 26 { 27 get 28 { 29 return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>(); 30 } 31 private set 32 { 33 _roleManager = value; 34 } 35 }
添加完代码后,记得根据错误提示添加命名空间using xxx;
4、修改ActionResult Index()。将其改为异步调用,并显示用户列表。代码如下:
1 // 2 // GET: /Users/异步获取用户列表 3 public async Task<ActionResult> Index() 4 { 5 return View(await UserManager.Users.ToListAsync()); 6 }
5、添加用户详情操作
1 // GET: /Users/Details/5/经由ID编号异步获取用户详细信息 2 public async Task<ActionResult> Details(string id) 3 { 4 //用户为空时返回400错误 5 if (id == null) 6 { 7 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 8 } 9 10 //按Id查找用户 11 var user = await UserManager.FindByIdAsync(id); 12 ViewBag.RoleNames = await UserManager.GetRolesAsync(user.Id); 13 return View(user); 14 }
6、添加创建用户操作
1 // 2 //异步读取用户创建 3 // GET: /Users/Create 4 public async Task<ActionResult> Create() 5 { 6 //读取角色列表 7 ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name"); 8 return View(); 9 } 10 11 // 12 //异步写入用户创建 13 // POST: /Users/Create 14 [HttpPost] 15 public async Task<ActionResult> Create(RegisterViewModel userViewModel, params string[] selectedRoles) 16 { 17 if (ModelState.IsValid) 18 { 19 var user = new ApplicationUser { UserName = userViewModel.Email, Email = userViewModel.Email }; 20 var adminresult = await UserManager.CreateAsync(user, userViewModel.Password); 21 22 //将用户添加到选定角色 23 if (adminresult.Succeeded) 24 { 25 if (selectedRoles != null) 26 { 27 var result = await UserManager.AddToRolesAsync(user.Id, selectedRoles); 28 if (!result.Succeeded) 29 { 30 ModelState.AddModelError("", result.Errors.First()); 31 ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name"); 32 return View(); 33 } 34 } 35 } 36 else 37 { 38 ModelState.AddModelError("", adminresult.Errors.First()); 39 ViewBag.RoleId = new SelectList(RoleManager.Roles, "Name", "Name"); 40 return View(); 41 42 } 43 return RedirectToAction("Index"); 44 } 45 ViewBag.RoleId = new SelectList(RoleManager.Roles, "Name", "Name"); 46 return View(); 47 }
7、添加用户编辑操作
1 // 2 //异步读取用户编辑 3 // GET: /Users/Edit/1 4 public async Task<ActionResult> Edit(string id) 5 { 6 //ID为空返回错误提示 7 if (id == null) 8 { 9 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 10 } 11 12 //查找用户 13 var user = await UserManager.FindByIdAsync(id); 14 if (user == null) 15 { 16 return HttpNotFound(); 17 } 18 //查找角色 19 var userRoles = await UserManager.GetRolesAsync(user.Id); 20 21 return View(new EditUserViewModel() 22 { 23 Id = user.Id, 24 Email = user.Email, 25 RolesList = RoleManager.Roles.ToList().Select(x => new SelectListItem() 26 { 27 Selected = userRoles.Contains(x.Name), 28 Text = x.Name, 29 Value = x.Name 30 }) 31 }); 32 } 33 34 // 35 //异步写入用户编辑 36 // POST: /Users/Edit/5 37 [HttpPost] 38 [ValidateAntiForgeryToken] 39 public async Task<ActionResult> Edit([Bind(Include = "Email,Id")] EditUserViewModel editUser, params string[] selectedRole) 40 { 41 if (ModelState.IsValid) 42 { 43 var user = await UserManager.FindByIdAsync(editUser.Id); 44 if (user == null) 45 { 46 return HttpNotFound(); 47 } 48 49 user.UserName = editUser.Email; 50 user.Email = editUser.Email; 51 52 var userRoles = await UserManager.GetRolesAsync(user.Id); 53 54 selectedRole = selectedRole ?? new string[] { }; 55 56 //将用户添加到指定的角色 57 var result = await UserManager.AddToRolesAsync(user.Id, selectedRole.Except(userRoles).ToArray<string>()); 58 59 if (!result.Succeeded) 60 { 61 ModelState.AddModelError("", result.Errors.First()); 62 return View(); 63 } 64 65 //将用户从指定的角色中删除 66 result = await UserManager.RemoveFromRolesAsync(user.Id, userRoles.Except(selectedRole).ToArray<string>()); 67 68 if (!result.Succeeded) 69 { 70 ModelState.AddModelError("", result.Errors.First()); 71 return View(); 72 } 73 return RedirectToAction("Index"); 74 } 75 ModelState.AddModelError("", "编辑操作失败。"); 76 return View(); 77 }
8、添加用户删除操作
1 // 2 //异步读取用户删除 3 // GET: /Users/Delete/5 4 public async Task<ActionResult> Delete(string id) 5 { 6 //ID为空返回错误提示 7 if (id == null) 8 { 9 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 10 } 11 var user = await UserManager.FindByIdAsync(id); 12 if (user == null) 13 { 14 return HttpNotFound(); 15 } 16 return View(user); 17 } 18 19 // 20 //异步写入用户删除 21 // POST: /Users/Delete/5 22 [HttpPost, ActionName("Delete")] 23 [ValidateAntiForgeryToken] 24 public async Task<ActionResult> DeleteConfirmed(string id) 25 { 26 if (ModelState.IsValid) 27 { 28 //ID为空返回错误提示 29 if (id == null) 30 { 31 return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 32 } 33 34 var user = await UserManager.FindByIdAsync(id); 35 if (user == null) 36 { 37 return HttpNotFound(); 38 } 39 var result = await UserManager.DeleteAsync(user); 40 if (!result.Succeeded) 41 { 42 ModelState.AddModelError("", result.Errors.First()); 43 return View(); 44 } 45 return RedirectToAction("Index"); 46 } 47 return View(); 48 }
用户管理的控制器编写结束。
Asp.Net MVC Identity 2.2.1 使用技巧(四)
原文:http://www.cnblogs.com/chonghanyu/p/6386532.html