Asp.Net MVC Identity 2.2.1 使用技巧(四)

使用用户管理器之用户管理

一、建立模型

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         [Required(AllowEmptyStrings = false)]
18         [Display(Name = "用户名称")]
19         public string UserName { get; set; }
20 
21         public IEnumerable<SelectListItem> RolesList { get; set; }
22     }

为保证代码简洁,删除不必要的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                 UserName = user.UserName,
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 = "UserName,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.UserName;
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         }

[ValidateAntiForgeryToken]为加密操作。

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         }

用户管理的控制器编写结束。

原文地址:https://www.cnblogs.com/chonghanyu/p/6386532.html