Asp.Net MVC Identity 2.2.1 使用技巧(四)
使用用户管理器之用户管理
一、建立模型
1、在Models文件夹上点右键 》添加》类 类的名称自定,我用AdminViewModels命名的。
2、更改模板自建的AdminViewModels类为RoleViewModel,并添加EditUserViewModel类,代码完成如下:
- public class RoleViewModel
- {
- public string Id { get; set; }
- [Required(AllowEmptyStrings = false)]
- [Display(Name = "角色名称")]
- public string Name { get; set; }
- }
- public class EditUserViewModel
- {
- public string Id { get; set; }
- //[Required(AllowEmptyStrings = false)]
- //[Display(Name = "电邮地址")]
- //[EmailAddress]
- //public string Email { get; set; }
- [Required(AllowEmptyStrings = false)]
- [Display(Name = "用户名称")]
- public string UserName { get; set; }
- public IEnumerable<SelectListItem> RolesList { get; set; }
- }
为保证代码简洁,删除不必要的using。
二、建立控制器UsersAdminController
1、在controllers文件夹上点右键》添加》控制器, 我这里选的是“MVC5 控制器-空”,名称设置为:UsersAdminController.cs
2、添加操作权限。在空间命名下第一个{下面(9行)添加[Authorize(Roles = "Admin")]用以此控制器操作只有admin角色组有权限访问。如果你选择了之前的可选操作这里可以直接添加权限,否则要么改,要么先注释掉。
3、在public class UsersAdminController : Controller内添加如下代码:
- public UsersAdminController()
- {
- }
- public UsersAdminController(ApplicationUserManager userManager, ApplicationRoleManager roleManager)
- {
- UserManager = userManager;
- RoleManager = roleManager;
- }
- private ApplicationUserManager _userManager;
- public ApplicationUserManager UserManager
- {
- get
- {
- return _userManager ?? HttpContext.GetOwinContext().GetUserManager<ApplicationUserManager>();
- }
- private set
- {
- _userManager = value;
- }
- }
- private ApplicationRoleManager _roleManager;
- public ApplicationRoleManager RoleManager
- {
- get
- {
- return _roleManager ?? HttpContext.GetOwinContext().Get<ApplicationRoleManager>();
- }
- private set
- {
- _roleManager = value;
- }
- }
添加完代码后,记得根据错误提示添加命名空间using xxx;
4、修改ActionResult Index()。将其改为异步调用,并显示用户列表。代码如下:
- //
- // GET: /Users/异步获取用户列表
- public async Task<ActionResult> Index()
- {
- return View(await UserManager.Users.ToListAsync());
- }
5、添加用户详情操作
- // GET: /Users/Details/5/经由ID编号异步获取用户详细信息
- public async Task<ActionResult> Details(string id)
- {
- //用户为空时返回400错误
- if (id == null)
- {
- return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
- }
- //按Id查找用户
- var user = await UserManager.FindByIdAsync(id);
- ViewBag.RoleNames = await UserManager.GetRolesAsync(user.Id);
- return View(user);
- }
6、添加创建用户操作
- //
- //异步读取用户创建
- // GET: /Users/Create
- public async Task<ActionResult> Create()
- {
- //读取角色列表
- ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name");
- return View();
- }
- //
- //异步写入用户创建
- // POST: /Users/Create
- [HttpPost]
- public async Task<ActionResult> Create(RegisterViewModel userViewModel, params string[] selectedRoles)
- {
- if (ModelState.IsValid)
- {
- var user = new ApplicationUser { UserName = userViewModel.Email, Email = userViewModel.Email };
- var adminresult = await UserManager.CreateAsync(user, userViewModel.Password);
- //将用户添加到选定角色
- if (adminresult.Succeeded)
- {
- if (selectedRoles != null)
- {
- var result = await UserManager.AddToRolesAsync(user.Id, selectedRoles);
- if (!result.Succeeded)
- {
- ModelState.AddModelError("", result.Errors.First());
- ViewBag.RoleId = new SelectList(await RoleManager.Roles.ToListAsync(), "Name", "Name");
- return View();
- }
- }
- }
- else
- {
- ModelState.AddModelError("", adminresult.Errors.First());
- ViewBag.RoleId = new SelectList(RoleManager.Roles, "Name", "Name");
- return View();
- }
- return RedirectToAction("Index");
- }
- ViewBag.RoleId = new SelectList(RoleManager.Roles, "Name", "Name");
- return View();
- }
7、添加用户编辑操作
- //
- //异步读取用户编辑
- // GET: /Users/Edit/1
- public async Task<ActionResult> Edit(string id)
- {
- //ID为空返回错误提示
- if (id == null)
- {
- return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
- }
- //查找用户
- var user = await UserManager.FindByIdAsync(id);
- if (user == null)
- {
- return HttpNotFound();
- }
- //查找角色
- var userRoles = await UserManager.GetRolesAsync(user.Id);
- return View(new EditUserViewModel()
- {
- Id = user.Id,
- UserName = user.UserName,
- RolesList = RoleManager.Roles.ToList().Select(x => new SelectListItem()
- {
- Selected = userRoles.Contains(x.Name),
- Text = x.Name,
- Value = x.Name
- })
- });
- }
- //
- //异步写入用户编辑
- // POST: /Users/Edit/5
- [HttpPost]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> Edit([Bind(Include = "UserName,Id")] EditUserViewModel editUser, params string[] selectedRole)
- {
- if (ModelState.IsValid)
- {
- var user = await UserManager.FindByIdAsync(editUser.Id);
- if (user == null)
- {
- return HttpNotFound();
- }
- user.UserName = editUser.UserName;
- //user.Email = editUser.Email;
- var userRoles = await UserManager.GetRolesAsync(user.Id);
- selectedRole = selectedRole ?? new string[] { };
- //将用户添加到指定的角色
- var result = await UserManager.AddToRolesAsync(user.Id, selectedRole.Except(userRoles).ToArray<string>());
- if (!result.Succeeded)
- {
- ModelState.AddModelError("", result.Errors.First());
- return View();
- }
- //将用户从指定的角色中删除
- result = await UserManager.RemoveFromRolesAsync(user.Id, userRoles.Except(selectedRole).ToArray<string>());
- if (!result.Succeeded)
- {
- ModelState.AddModelError("", result.Errors.First());
- return View();
- }
- return RedirectToAction("Index");
- }
- ModelState.AddModelError("", "编辑操作失败。");
- return View();
- }
[ValidateAntiForgeryToken]为加密操作。
8、添加用户删除操作
- //
- //异步读取用户删除
- // GET: /Users/Delete/5
- public async Task<ActionResult> Delete(string id)
- {
- //ID为空返回错误提示
- if (id == null)
- {
- return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
- }
- var user = await UserManager.FindByIdAsync(id);
- if (user == null)
- {
- return HttpNotFound();
- }
- return View(user);
- }
- //
- //异步写入用户删除
- // POST: /Users/Delete/5
- [HttpPost, ActionName("Delete")]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> DeleteConfirmed(string id)
- {
- if (ModelState.IsValid)
- {
- //ID为空返回错误提示
- if (id == null)
- {
- return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
- }
- var user = await UserManager.FindByIdAsync(id);
- if (user == null)
- {
- return HttpNotFound();
- }
- var result = await UserManager.DeleteAsync(user);
- if (!result.Succeeded)
- {
- ModelState.AddModelError("", result.Errors.First());
- return View();
- }
- return RedirectToAction("Index");
- }
- return View();
- }
用户管理的控制器编写结束。
Asp.Net MVC Identity 2.2.1 使用技巧(四)的更多相关文章
- Asp.Net MVC Identity 2.2.1 使用技巧(二)
之前我们看到了新生成的项目中跟identity有关的有四个文件,这些文件是基础功能,并未开启identity的全部功能.现在我们先启用角色功能. 1.在App_Start文件夹中的IdentityCo ...
- Asp.Net MVC Identity 2.2.1 使用技巧(一)
开发环境:vs2015 UP3 or vs2017RC 项目环境:asp.net 4.6.1 identity版本为:asp.net identity 2.2.1 1.创建项目. 没什么好说 ...
- Asp.Net MVC Identity 2.2.1 使用技巧(八)
一.添加管理链接 在View/Shared/_layout.cshtml,在页面导航上(28行)添加如下代码: @*通过身份验证并确认用户属于Admin角色显示管理菜单*@ @if (Request. ...
- Asp.Net MVC Identity 2.2.1 使用技巧(七)
创建角色管理相关视图 1.添加视图 打开RolesAdminController.cs 将鼠标移动到public ActionResult Index()上 右键>添加视图 系统会弹出 ...
- Asp.Net MVC Identity 2.2.1 使用技巧(六)
使用用户管理器之角色管理 一.建立模型,这里我们其实在之前的技巧(五)已经建好了. 二.建立控制器RolesAdminController 1.在controllers文件夹上点右键>添加> ...
- Asp.Net MVC Identity 2.2.1 使用技巧(五)
创建用户管理相关视图 1.添加视图 打开UsersAdminController.cs 将鼠标移动到public ActionResult Index()上 右键>添加视图 系统会弹出 ...
- Asp.Net MVC Identity 2.2.1 使用技巧(三)
使用用户管理器之用户注册 用户管理的基本功能模块中已经做好了,我们现在做一些调整. 1.修改用户名注册规则. 上一篇中可选操作已经详解了这里把基本的设置简介下. 打开App_Start/identit ...
- ASP.NET MVC Identity 兩個多個連接字符串問題解決一例
按照ASP.NET MVC Identity建立了一個用戶權限管理模塊,由于還要加自己已有的數據庫,所以建立了一個實體模型,建立了之后,發現登錄不了: 一直顯示“Login in failed for ...
- ASP.NET MVC 3 入门级常用设置、技巧和报错
1.ASP.NET MVC 3 如何去除默认验证 这个默认验证是在web.config配置文件中设置的 <add key="ClientValidationEnabled&quo ...
随机推荐
- WPF中使用Grid来实现图层的效果
<Style x:Key="ScanButtonStyle" TargetType="{x:Type Button}"> <!--<Se ...
- WPF中C#代码触发鼠标点击事件
1.如下代码; <Button x:Name="btnTest" Click="btnTest_Click"> <Button.Trigger ...
- 环境准备 Ubuntu & Docker
目录 Ubuntu 简介 配置 Docker 简介 Docker CE 安装 参考 本文主要讲解在 Ubuntu 上安装和配置 Docker CE. Ubuntu 简介 Ubuntu(乌班图)是一个基 ...
- shell脚本生成服务器密码
#!/bin/bash len=90 str=(a b c d e f g h i j k l m n o p q r s t u vw x y z A B C D E F G H I J K L M ...
- WPF: RenderTransform特效
WPF中的变形(RenderTransform)类是为了达到直接去改变某个Silverlight对象的形状(比如缩放.旋转一个元素)的目的而设计的,RenderTransform包含的变形属性成员就是 ...
- [javaSE] 网络编程(浏览器客户端-自定义服务端)
获取ServerSocket对象,new出来构造参数:int类型端口号 调用ServerSocket对象的accept()方法,得到Socket对象 获取PrintWriter对象,new出来,构造参 ...
- Java学习--jsp内置对象
九个内置对象,其中Out,request,response,session,application常用 get与post区别: request对象: response对象: 请求转发与请求重定向的区别 ...
- WCF4.0安装 NET.TCP启用及常见问题
WCF4.0安装及NET.TCP启用 WCF 4.0 一般默认安装.net Framework 4.0的时候已经安装. 但如果先装.net framework 4.0,后装IIS,就会出现问题.需要重 ...
- linux端口开放
netstat 查看端口开放情况: netstat 命令用于显示各种网络相关信息,如网络连接,路由表,接口状态 (Interface Statistics),masquerade 连接,多播成员 ...
- redis集群的远程管理与监控
一.redis集群的重要性 目前大部分的互联网平台,都会用到Redis内存数据库,以提高响应速度,提升用户使用体验. 为了实现Redis的高可用,通常都会布署Redis集群,使用Redis-Senti ...