Identity角色管理五(添加用户到角色组)
因需要在用户列表中点详情按钮来到当前页,所以需要展示分组详情,并展示当前所属角色组的用户
- public async Task<ActionResult> Details(string id)
- {
- //查找是否存在角色组
- var role = await _roleManager.FindByIdAsync(id);
- //如果角色不存在跳转回角色列表
- if (role == null)
- {
- return RedirectToAction(nameof(Index));
- }
- //给视图模型赋值
- var roleUserViewModel = new RoleUserViewModel()
- {
- RoleId = role.Id,
- RoleName = role.Name
- };
- //找出所有用户
- var users = await _userManager.Users.AsNoTracking().ToListAsync();
- //循环查找用户是否存在当前角色组
- foreach (var item in users)
- {
- if (await _userManager.IsInRoleAsync(item, role.Name))
- {
- roleUserViewModel.Users.Add(item);
- }
- }
- return View(roleUserViewModel);
- }
详情展示页视图代码如下
- @model Shop.ViewModel.RoleUserViewModel
- @{
- ViewData["Title"] = "Details";
- }
- <h1>Details</h1>
- <div>
- <h4>CreateRoleViewModel</h4>
- <hr />
- <dl class="row">
- <dt class="col-sm-5">
- @Html.DisplayFor(model => model.RoleId)
- </dt>
- <dd class="col-sm-2">
- @Html.DisplayFor(model => model.RoleName)
- </dd>
- </dl>
- <dl class="row">
- @foreach (var item in Model.Users)
- {
- <dt>@item.UserName</dt>
- }
- </dl>
- <a asp-action="AddUserToRole" asp-route-id="@Model.RoleId" class="btn btn-success">添加用户到角色</a>
- </div>
- <div>
- @Html.ActionLink("Edit", "Edit", new { /* id = Model.PrimaryKey */ }) |
- <a asp-action="Index">Back to List</a>
- </div>
创建UserRoleViewModel模型类
- using System.Collections.Generic;
- using Microsoft.AspNetCore.Identity;
- namespace Shop.ViewModel
- {
- public class UserRoleViewModel
- {
- public UserRoleViewModel()
- {
- Users = new List<IdentityUser>();
- }
- public string RoleId { get; set; }
- public string UserId { get; set; }
- public List<IdentityUser> Users { get; set; }
- }
- }
在role控制器中创建添加用户到角色组的显示方法
- public async Task<ActionResult> AddUserToRole(string id)
- {
- //查找是否存在角色
- var role = await _roleManager.FindByIdAsync(id);
- //如果角色不存在跳回角色列表
- if (role == null)
- {
- return RedirectToAction(nameof(Index));
- }
- //将查找的角色ID添加到视图模型
- var userRoleViewModel = new UserRoleViewModel()
- {
- RoleId = role.Id
- };
- //将所有用户找出来
- var users = await _userManager.Users.AsNoTracking().ToListAsync();
- //循环遍历是否用户不在当前角色中、
- foreach (var item in users)
- {
- if (!await _userManager.IsInRoleAsync(item, role.Name))
- {
- userRoleViewModel.Users.Add(item);
- }
- }
- //将视图模型返回
- return View(userRoleViewModel);
- }
根据选择添加用户到角色组
- [HttpPost]
- [ValidateAntiForgeryToken]
- public async Task<ActionResult> AddUserToRole(UserRoleViewModel input)
- {
- //查找当前用户
- var user = await _userManager.FindByIdAsync(input.UserId);
- //查找当前角色组
- var role = await _roleManager.FindByIdAsync(input.RoleId);
- //角色跟用户都找到
- if (user != null && role != null)
- {
- //用户管理中添加当前用户到角色组(当前用户,角色组名称)
- var result = await _userManager.AddToRoleAsync(user, role.Name);
- if (result.Succeeded)
- {
- return RedirectToAction(nameof(Index));
- }
- //输出所有Model级错误
- foreach (var error in result.Errors)
- {
- ModelState.AddModelError("", error.Description);
- }
- }
- return View(input);
- }
页面显示,选择后按添加执行上边方法写入数据库
添加后返回详情页,并显示当前角色组的用户如图所示
添加用户后,再次添加将不再显示在选择框内
删除角色跟添加角色类似,删除代码为_userManager.RemoveFromRoleAsync(user,role.Name)
Identity角色管理五(添加用户到角色组)的更多相关文章
- linux下添加用户到sudo组 并禁止sudo用户修改密码
linux下添加用户到sudo组 创建用户 useradd hanli 为新用户设置密码 passwd hanli 创建用户组 groupadd op 将用户添加到用户组 usermod - ...
- MySQL用户管理:添加用户、授权、删除用户
文章首发于[博客园-陈树义],请尊重原创保留原文链接. 添加用户 以root用户登录数据库,运行以下命令: create user zhangsan identified by 'zhangsan'; ...
- ubuntu 17.04 添加用户到sudo组
最近在系统中安装了KVM和docker,用KVM的时候好好的,可以直接使用virsh等命令.但是安装了docker,使用docker命令时需要在前面加上sudo,这个用起来就挺麻烦的,于是想到dock ...
- linux下添加用户到sudo组
#查看当前用户所属组groups #查看指定用户hiuser所属组groups hiuser #添加用户hiuser到sudo组sudo usermod -G sudo hiuser
- Linux 添加用户(user),组(Group)以及权限(Permission)
1. 添加用户 sudo adduser UserName 异常: sudo adduser --force-badname <username> 之后为这个用户添加其他辅助信息 切换用户 ...
- linux添加用户所在群组
etc目录下面有两个文件一个passwd一个grouppasswd里gid是主组,其他组是扩展组,扩展组在/etc/group里描述.useradd username如果不指定,默认创建一个与uid相 ...
- Linux添加用户到sudoers组
切换用户至rootvim /etc/sudoers 找到root ALL=(ALL) ALL,在下方新增 stack ALL=(ALL) NOPASSWD: ALL w ...
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(22)-为用户设置角色
ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1):框架搭建 (2):数据库访问层的设计Demo (3):面向接口编程 (4 ):业务逻辑层的封装 ...
- Oracle用户、授权、角色管理
创建和删除用户是Oracle用户管理中的常见操作,但这其中隐含了Oracle数据库系统的系统权限与对象权限方面的知识.掌握还Oracle用户的授权操作和原理,可以有效提升我们的工作效率. Oracle ...
随机推荐
- vue 传参动态
方法一: router/index.js { path: '/src/views/activitiesDetails', name: activitiesDetails, component: act ...
- Bootstrap Blazor 更新版本 5.6.0
Bootstrap Blazor 是一款基于 Bootstrap 的 企业级 Blazor UI 组件库,目前内置近 90 个组件,欢迎大家尝试使用.本次更新全面升级支持 Bootstrap V5.6 ...
- Haskell Interactive Development in Emacs
Installation Following haskell-mode. Use MELPA repository: add the following into ~/.emacs (require ...
- Typora使用Gitee图床
前言 现在比较流行的Markdown编辑器应该是Typora,但是Typora本身不支持本地上传图片的云端存储,所以当我们写博客的时候,需要上传图片,就得自己设置图床,今天给大家推荐一款免费的图床-G ...
- CSS Transform完全指南 #flight.Archives007
Title/ CSS Transform完全指南 #flight.Archives007 序: 第7天了! 终身学习, 坚持创作, 为生活埋下微小的信仰. 我是忘我思考,共同进步! 简介: 一篇最简约 ...
- Redis内存碎片
内存碎片大家都已经耳熟能详了.当Redis数据删除后,Redis释放的内存空间可能不是连续的,这就会带来一个问题,这些不连续的内存空间有可能处于闲置的,但是redis缺无法来保存数据,这就会减低Red ...
- 浅谈 SQL 注入(注入篇)
一.SQL注入简介 1.1 什么是SQL注入 在用户可控制的参数上过滤不严或没有任何限制,使得用户将传入的参数(如URL,表单,http header)与SQL语句合并构成一条 SQL语句传递给web ...
- 009 FPGA实现网口通信的几种方式【转载】
从硬件上来说,一般PHY芯片为模数混合电路,负责接收电.光这类模拟信号,经过解调和A/D转换后通过MII接口将信号交给MAC芯片进行处理.一般MAC芯片为纯数字电路. 物理层定义了数据传送与接收所需要 ...
- Visual Studio调试器指南---多线程应用程序调试(一)
线程是操作系统向其授予处理器时间的指令序列. 在操作系统中运行的每个进程都包含至少一个线程. 包含多个线程的进程称为多线程.有多个处理器.多核处理器或超线程进程的计算机可以同时运行多个线程. 使用多个 ...
- .Net Core WebApi(三)--使用 IdentityServer4 4.1.1 踩坑记录
目的:创建IdentityServer 并通过PostMan验证获取token 第一次配置如下 public class Config { public static IEnumerable<A ...