asp.net identity 2.2.0 中角色启用和基本使用(五)
建立控制器UsersAdminController
第一步:在controllers文件夹上点右键》添加》控制器, 我这里选的是“MVC5 控制器-空”,名称设置为:UsersAdminController.cs
第二步:添加命名空间
using System.Data.Entity; using System.Net; using System.Threading.Tasks; using xxxx(项目名).Models; using Microsoft.AspNet.Identity; using Microsoft.AspNet.Identity.Owin; using Microsoft.AspNet.Identity.EntityFramework;
第三步:在控制器的空间命名下添加权限(如果在第一讲中你选择了可选操作这里可以直接添加权限,否则要么改,要么先别填。)
[Authorize(Roles = "Admin")]
第四步:在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; } }
第五步:修改ActionResult Index()
修改后为
public async Task<ActionResult> Index() { return View(await UserManager.Users.ToListAsync()); }
第六步:添加用户详情
// //异步读取用户详情 //GET: /Users/Details/5 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); }
第七步:添加用户创建
// //异步读取用户创建 //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(); }
第八步:添加用户编辑
// //读取用户编辑 // GET: /Users/Edit/1 public async Task <ActionResult> Edit (string 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, Email = user.Email, 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 = "Email,Id")]EditUserViewModel editUser, params string[] selectedRole) { if(ModelState.IsValid) { var user = await UserManager.FindByIdAsync(editUser.Id); if (user == null) { return HttpNotFound(); } user.UserName = editUser.Email; 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(); } return RedirectToAction("Index"); } ModelState.AddModelError("", "操作失败。"); return View(); }
第九步:添加用户删除
// //读取用户删除 // GET: /Users/Delete/5 public async Task<ActionResult> Delete(string 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) { 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(); }
至此,UsersAdmin控制器完成。
asp.net identity 2.2.0 中角色启用和基本使用(五)的更多相关文章
- asp.net identity 2.2.0 中角色启用和基本使用(七)提示点
在使用asp.net identity 2.2.0 中,大家可能设计到一些修改和配置 关于Identity的配置,在App_Start文件中的IdentityConfig.cs中,这里几乎有你需要的一 ...
- asp.net identity 2.2.0 中角色启用和基本使用(六)
创建用户管理相关视图 第一步:添加视图 打开UsersAdminController.cs 将鼠标移动到public ActionResult Index()上 右键>添加视图 系 ...
- asp.net identity 2.2.0 中角色启用和基本使用(四)
创建角色相关视图 第一步:添加视图 打开RolesAdminController.cs 将鼠标移动到public ActionResult Index()上 右键>添加视图 系统会 ...
- asp.net identity 2.2.0 中角色启用和基本使用(三)
创建控制器 第一步:在controllers文件夹上点右键>添加>控制器, 我这里选的是“MVC5 控制器-空”,名称设置为:RolesAdminController.cs 第二步:添加命 ...
- asp.net identity 2.2.0 中角色启用和基本使用(二)
建立模型 第一步:在Models文件夹上点右键 >添加>类 类的名称自定,我用AdminViewModels命名的 因为是讲基本使用,我这里不做任何扩展. 第二步:添加如下命名空间 ...
- ASP.NET Identity 身份验证和基于角色的授权
ASP.NET Identity 身份验证和基于角色的授权 阅读目录 探索身份验证与授权 使用ASP.NET Identity 身份验证 使用角色进行授权 初始化数据,Seeding 数据库 小结 在 ...
- asp.net identity 2.2.0 在MVC下的角色启用和基本使用(一)
基本环境:asp.net 4.5.2 第一步:在App_Start文件夹中的IdentityConfig.cs中添加角色控制器. 在namespace xxx内(即最后一个“}”前面)添加 角色控制类 ...
- ASP.NET MVC 随想录——探索ASP.NET Identity 身份验证和基于角色的授权,中级篇
在前一篇文章中,我介绍了ASP.NET Identity 基本API的运用并创建了若干用户账号.那么在本篇文章中,我将继续ASP.NET Identity 之旅,向您展示如何运用ASP.NET Ide ...
- asp.net identity 2.2.0 在WebForm下的角色启用和基本使用(四)
有网友问及权限的问题,其实我觉得没什么改进. 主目录下的web.config基本不用改.要说要改的也就只有数据库连接了. <authentication mode="None" ...
随机推荐
- wpf ,tooltip的style
<Style x:Key="MyToolTipStyle" TargetType="ToolTip"> <Setter Property=&q ...
- SpringBoot使用velocity模板引擎
https://my.oschina.net/universsky/blog/704446
- 网站迁移时候,发现<head>内容都到body里了
遇到的问题截图如下: 这个是编码问题,需要把所有涉及的文件保存成UTF-8 without BOM,手动的话可以用notepad++ 如果网站支持php,这边提供了一个php的脚本(clearBom. ...
- BZOJ4435 : [Cerc2015]Juice Junctions
最大流=最小割,而因为本题点的度数不超过3,所以最小割不超过3,EK算法的复杂度为$O(n+m)$. 通过分治求出最小割树,设$f[i][j][k]$表示最小割为$i$时,$j$点在第$k$次分治过程 ...
- ACM: Gym 100935B Weird Cryptography - 简单的字符串处理
Weird Cryptography Time Limit:2000MS Memory Limit:65536KB 64bit IO Format:%I64d & %I64u ...
- JS性能优化笔记搜索整理
通过网上查找资料了解关于性能优化方面的内容,现简单整理,仅供大家在优化的过程中参考使用,如有什么问题请及时提出,再做出相应的补充修改. 一. 让代码简洁:一些简略的表达方式也会产生很好的优化 eg:x ...
- JS:操作样式表2 :用JS实现添加和删除一个类名的功能(addClass()和removeClass())
var box = document.getElementById("box"); box.id = "pox"; 将id = “box”,改为id = “po ...
- Codeforces Round #207 (Div. 1) A. Knight Tournament(STL)
脑子又卡了...来一发set的,STL真心不熟. #include <stdio.h> #include <string.h> #include <iostream> ...
- 【BZOJ3343】教主的魔法 分块+二分
Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的 ...
- implicit和explicit的基本使用
class MyAge { public int Age { get; set; } public static implicit operator MyAge(int age) { return n ...