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

一、建立模型

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

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

Asp.Net MVC Identity 2.2.1 使用技巧(四)的更多相关文章

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

    之前我们看到了新生成的项目中跟identity有关的有四个文件,这些文件是基础功能,并未开启identity的全部功能.现在我们先启用角色功能. 1.在App_Start文件夹中的IdentityCo ...

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

    开发环境:vs2015 UP3  or  vs2017RC  项目环境:asp.net 4.6.1   identity版本为:asp.net identity 2.2.1 1.创建项目. 没什么好说 ...

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

    一.添加管理链接 在View/Shared/_layout.cshtml,在页面导航上(28行)添加如下代码: @*通过身份验证并确认用户属于Admin角色显示管理菜单*@ @if (Request. ...

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

    创建角色管理相关视图 1.添加视图 打开RolesAdminController.cs   将鼠标移动到public ActionResult Index()上  右键>添加视图   系统会弹出 ...

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

    使用用户管理器之角色管理 一.建立模型,这里我们其实在之前的技巧(五)已经建好了. 二.建立控制器RolesAdminController 1.在controllers文件夹上点右键>添加> ...

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

    创建用户管理相关视图 1.添加视图 打开UsersAdminController.cs   将鼠标移动到public ActionResult Index()上  右键>添加视图   系统会弹出 ...

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

    使用用户管理器之用户注册 用户管理的基本功能模块中已经做好了,我们现在做一些调整. 1.修改用户名注册规则. 上一篇中可选操作已经详解了这里把基本的设置简介下. 打开App_Start/identit ...

  8. ASP.NET MVC Identity 兩個多個連接字符串問題解決一例

    按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示“Login in failed for ...

  9. ASP.NET MVC 3 入门级常用设置、技巧和报错

    1.ASP.NET MVC 3 如何去除默认验证 这个默认验证是在web.config配置文件中设置的    <add key="ClientValidationEnabled&quo ...

随机推荐

  1. 微服务Kong(三)——添加一个API

    在开始前,请确保您已经安装了KONG服务,并且已经启动了KONG服务. 在本节中,您可以学习到:如何在KONG层添加一个API.这是您使用KONG来管理您的API的第一步.对于此篇教程,我们将使用 h ...

  2. WPF 将TextBox更改为PasswordBox样式(文字显示方式为密码)

    在TextBox样式中增加如下所诉: <Style x:Key="TxtPwd" TargetType="{x:Type TextBox}"> &l ...

  3. C 标准库 - ctype.h之isalnum使用

    isalnum int isalnum ( int c ); Checks whether c is either a decimal digit or an uppercase or lowerca ...

  4. WPF中使用TextBlock的Inlines属性来完成复杂的文字内容

    参考:http://blog.csdn.net/zhangjiyehandsom/article/details/5498845 1. 需求:要在一行内容中显示不同颜色以及粗细不一的字体, 解决办法: ...

  5. WPF通过<x:Array>直接为ListBox的ItemsSource赋值

    <!--其中sys前缀是在xmlns中引入了System的命名空间--> <ListBox.ItemsSource> <x:Array Type="{x:Typ ...

  6. leetcode5:subsets问题

    问题描述: Given a set of distinct integers, nums, return all possible subsets. Note: Elements in a subse ...

  7. [转]IIS的各种身份验证详细测试

    本文转自:http://www.cnblogs.com/chnking/archive/2007/11/20/965553.html#_Toc183326163 一.    IIS的身份验证概述 1. ...

  8. HTML页面格式

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  9. WPF月视图控件

    简介 在做一个应用时,需要做成日历月视图的形式.自己做较麻烦,于是上网找找看,在CodeProject上发现了这个Quick and Simple WPF Month-view Calendar,可是 ...

  10. centos ssh远程登陆

    登录Centos6.5系统. ◆示例:使用root用户登录. 注:若为非root用户登录,输入执行某些命权限不够时需加sudo.   查看SSH是否安装. ◆输入命令:rpm -qa | grep s ...