因需要在用户列表中点详情按钮来到当前页,所以需要展示分组详情,并展示当前所属角色组的用户

  1. public async Task<ActionResult> Details(string id)
  2. {
  3. //查找是否存在角色组
  4. var role = await _roleManager.FindByIdAsync(id);
  5. //如果角色不存在跳转回角色列表
  6. if (role == null)
  7. {
  8. return RedirectToAction(nameof(Index));
  9. }
  10. //给视图模型赋值
  11. var roleUserViewModel = new RoleUserViewModel()
  12. {
  13. RoleId = role.Id,
  14. RoleName = role.Name
  15. };
  16. //找出所有用户
  17. var users = await _userManager.Users.AsNoTracking().ToListAsync();
  18. //循环查找用户是否存在当前角色组
  19. foreach (var item in users)
  20. {
  21. if (await _userManager.IsInRoleAsync(item, role.Name))
  22. {
  23. roleUserViewModel.Users.Add(item);
  24. }
  25. }
  26. return View(roleUserViewModel);
  27. }

详情展示页视图代码如下

  1. @model Shop.ViewModel.RoleUserViewModel
  2.  
  3. @{
  4. ViewData["Title"] = "Details";
  5. }
  6.  
  7. <h1>Details</h1>
  8.  
  9. <div>
  10. <h4>CreateRoleViewModel</h4>
  11. <hr />
  12. <dl class="row">
  13. <dt class="col-sm-5">
  14. @Html.DisplayFor(model => model.RoleId)
  15. </dt>
  16. <dd class="col-sm-2">
  17. @Html.DisplayFor(model => model.RoleName)
  18. </dd>
  19. </dl>
  20. <dl class="row">
  21. @foreach (var item in Model.Users)
  22. {
  23. <dt>@item.UserName</dt>
  24. }
  25. </dl>
  26. <a asp-action="AddUserToRole" asp-route-id="@Model.RoleId" class="btn btn-success">添加用户到角色</a>
  27.  
  28. </div>
  29. <div>
  30. @Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) |
  31. <a asp-action="Index">Back to List</a>
  32. </div>

创建UserRoleViewModel模型类

  1. using System.Collections.Generic;
  2. using Microsoft.AspNetCore.Identity;
  3.  
  4. namespace Shop.ViewModel
  5. {
  6. public class UserRoleViewModel
  7. {
  8. public UserRoleViewModel()
  9. {
  10. Users = new List<IdentityUser>();
  11. }
  12. public string RoleId { get; set; }
  13. public string UserId { get; set; }
  14. public List<IdentityUser> Users { get; set; }
  15. }
  16. }

在role控制器中创建添加用户到角色组的显示方法

  1. public async Task<ActionResult> AddUserToRole(string id)
  2. {
  3. //查找是否存在角色
  4. var role = await _roleManager.FindByIdAsync(id);
  5. //如果角色不存在跳回角色列表
  6. if (role == null)
  7. {
  8. return RedirectToAction(nameof(Index));
  9. }
  10. //将查找的角色ID添加到视图模型
  11. var userRoleViewModel = new UserRoleViewModel()
  12. {
  13. RoleId = role.Id
  14. };
  15. //将所有用户找出来
  16. var users = await _userManager.Users.AsNoTracking().ToListAsync();
  17. //循环遍历是否用户不在当前角色中、
  18. foreach (var item in users)
  19. {
  20. if (!await _userManager.IsInRoleAsync(item, role.Name))
  21. {
  22. userRoleViewModel.Users.Add(item);
  23. }
  24. }
  25. //将视图模型返回
  26. return View(userRoleViewModel);
  27. }

根据选择添加用户到角色组

  1. [HttpPost]
  2. [ValidateAntiForgeryToken]
  3. public async Task<ActionResult> AddUserToRole(UserRoleViewModel input)
  4. {
  5. //查找当前用户
  6. var user = await _userManager.FindByIdAsync(input.UserId);
  7. //查找当前角色组
  8. var role = await _roleManager.FindByIdAsync(input.RoleId);
  9. //角色跟用户都找到
  10. if (user != null && role != null)
  11. {
  12. //用户管理中添加当前用户到角色组(当前用户,角色组名称)
  13. var result = await _userManager.AddToRoleAsync(user, role.Name);
  14. if (result.Succeeded)
  15. {
  16. return RedirectToAction(nameof(Index));
  17. }
  18. //输出所有Model级错误
  19. foreach (var error in result.Errors)
  20. {
  21. ModelState.AddModelError("", error.Description);
  22. }
  23. }
  24. return View(input);
  25. }

页面显示,选择后按添加执行上边方法写入数据库

添加后返回详情页,并显示当前角色组的用户如图所示

添加用户后,再次添加将不再显示在选择框内

删除角色跟添加角色类似,删除代码为_userManager.RemoveFromRoleAsync(user,role.Name)

Identity角色管理五(添加用户到角色组)的更多相关文章

  1. linux下添加用户到sudo组 并禁止sudo用户修改密码

    linux下添加用户到sudo组 创建用户  useradd hanli 为新用户设置密码  passwd hanli 创建用户组  groupadd  op 将用户添加到用户组  usermod - ...

  2. MySQL用户管理:添加用户、授权、删除用户

    文章首发于[博客园-陈树义],请尊重原创保留原文链接. 添加用户 以root用户登录数据库,运行以下命令: create user zhangsan identified by 'zhangsan'; ...

  3. ubuntu 17.04 添加用户到sudo组

    最近在系统中安装了KVM和docker,用KVM的时候好好的,可以直接使用virsh等命令.但是安装了docker,使用docker命令时需要在前面加上sudo,这个用起来就挺麻烦的,于是想到dock ...

  4. linux下添加用户到sudo组

    #查看当前用户所属组groups #查看指定用户hiuser所属组groups hiuser #添加用户hiuser到sudo组sudo usermod -G sudo hiuser

  5. Linux 添加用户(user),组(Group)以及权限(Permission)

    1. 添加用户 sudo adduser UserName 异常: sudo adduser --force-badname <username> 之后为这个用户添加其他辅助信息 切换用户 ...

  6. linux添加用户所在群组

    etc目录下面有两个文件一个passwd一个grouppasswd里gid是主组,其他组是扩展组,扩展组在/etc/group里描述.useradd username如果不指定,默认创建一个与uid相 ...

  7. Linux添加用户到sudoers组

    切换用户至rootvim /etc/sudoers 找到root    ALL=(ALL)       ALL,在下方新增 stack  ALL=(ALL)       NOPASSWD: ALL w ...

  8. ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色

    ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇)   (1):框架搭建    (2):数据库访问层的设计Demo    (3):面向接口编程   (4 ):业务逻辑层的封装    ...

  9. Oracle用户、授权、角色管理

    创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识.掌握还Oracle用户的授权操作和原理,可以有效提升我们的工作效率. Oracle ...

随机推荐

  1. vue 传参动态

    方法一: router/index.js { path: '/src/views/activitiesDetails', name: activitiesDetails, component: act ...

  2. Bootstrap Blazor 更新版本 5.6.0

    Bootstrap Blazor 是一款基于 Bootstrap 的 企业级 Blazor UI 组件库,目前内置近 90 个组件,欢迎大家尝试使用.本次更新全面升级支持 Bootstrap V5.6 ...

  3. Haskell Interactive Development in Emacs

    Installation Following haskell-mode. Use MELPA repository: add the following into ~/.emacs (require ...

  4. Typora使用Gitee图床

    前言 现在比较流行的Markdown编辑器应该是Typora,但是Typora本身不支持本地上传图片的云端存储,所以当我们写博客的时候,需要上传图片,就得自己设置图床,今天给大家推荐一款免费的图床-G ...

  5. CSS Transform完全指南 #flight.Archives007

    Title/ CSS Transform完全指南 #flight.Archives007 序: 第7天了! 终身学习, 坚持创作, 为生活埋下微小的信仰. 我是忘我思考,共同进步! 简介: 一篇最简约 ...

  6. Redis内存碎片

    内存碎片大家都已经耳熟能详了.当Redis数据删除后,Redis释放的内存空间可能不是连续的,这就会带来一个问题,这些不连续的内存空间有可能处于闲置的,但是redis缺无法来保存数据,这就会减低Red ...

  7. 浅谈 SQL 注入(注入篇)

    一.SQL注入简介 1.1 什么是SQL注入 在用户可控制的参数上过滤不严或没有任何限制,使得用户将传入的参数(如URL,表单,http header)与SQL语句合并构成一条 SQL语句传递给web ...

  8. 009 FPGA实现网口通信的几种方式【转载】

    从硬件上来说,一般PHY芯片为模数混合电路,负责接收电.光这类模拟信号,经过解调和A/D转换后通过MII接口将信号交给MAC芯片进行处理.一般MAC芯片为纯数字电路. 物理层定义了数据传送与接收所需要 ...

  9. Visual Studio调试器指南---多线程应用程序调试(一)

    线程是操作系统向其授予处理器时间的指令序列. 在操作系统中运行的每个进程都包含至少一个线程. 包含多个线程的进程称为多线程.有多个处理器.多核处理器或超线程进程的计算机可以同时运行多个线程. 使用多个 ...

  10. .Net Core WebApi(三)--使用 IdentityServer4 4.1.1 踩坑记录

    目的:创建IdentityServer 并通过PostMan验证获取token 第一次配置如下 public class Config { public static IEnumerable<A ...