• 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         }

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

  • 相关阅读:
    vue 开发环境搭建
    签名算法
    MySQL explain执行计划优化
    查看运行时某个java对象占用JVM大小及通过idea查看java的内存占用情况
    jenkins 配置
    CSS布局
    《JavaScript 代码优化指南》
    JavaScript 跨域漫游
    iFrame 功能详解
    粘性的底部布局
  • 原文地址:https://www.cnblogs.com/chonghanyu/p/6386532.html
Copyright © 2020-2023  润新知