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 ...
随机推荐
- HttpRunner3源码阅读:4. loader项目路径加载,用例文件转换、方法字典生成
loader.py 这个文件中主要是对yaml,json用例加载转换成用例处理, 预置函数加载成方法字典,路径加载等 可用资料 [importlib]. https://docs.python.org ...
- Python小白的数学建模课-12.非线性规划
非线性规划是指目标函数或约束条件中包含非线性函数的规划问题,实际就是非线性最优化问题. 从线性规划到非线性规划,不仅是数学方法的差异,更是解决问题的思想方法的转变. 非线性规划问题没有统一的通用方法, ...
- 背单词(AC自动机+线段树+dp+dfs序)
G. 背单词 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测方式:文本比较 题目描述 给定一张包含N个单词的表,每个单词有个价值W.要求从中选出一个子序列使 ...
- RESTful API 设计风格
HTTP常用动词 GET(SELECT):从服务器取出资源(一项或多项). POST(CREATE):在服务器新建一个资源. PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源). ...
- Spring Boot 入门系列(二十二)使用Swagger2构建 RESTful API文档
前面介绍了如何Spring Boot 快速打造Restful API 接口,也介绍了如何优雅的实现 Api 版本控制,不清楚的可以看我之前的文章:https://www.cnblogs.com/zha ...
- Markdown插入LaTex数学公式
本文转载自Nautilus_sailing的试试LaTeX插入数学公式,内容有所改动 今天写了一篇随笔,其中需要写几个数学式子,但是我又不想直接将公式做成图片后插入,我觉得很不美观还麻烦.但是我也不会 ...
- IDEA Error:java: 无效的源发行版: 11错误
IDEA Error:java: 无效的源发行版: 11错误 今天在网上下载了一个项目到本地运行报错 Error: Java : 无效的源发行版: 11 ,上网查了很多找到问题所在.项目的 JDK(P ...
- 21JavaScript笔记(1)
JavaScript 基于对象和事件驱动 简单描述性语言 函数优先 解释型(即时编译型) 具有安全性的脚本语言 1.js组成 核心语法(ECMAScript):开放的.标准的脚本语言规范,主要包含了语 ...
- Fiddler抓包实用非常详细,学会不要去做坏事~
为什么要先学fiddler?学习接口测试必学http协议,如果直接先讲协议,我估计小伙伴们更懵,为了更好的理解协议,先从抓包开始.结合抓包工具讲http协议更容易学一些. 抓firefox上https ...
- 无法加载文件 E:\PROGRAM FILES\NODEJS\NODE_GLOBAL\yarn.ps1,因为在此系统中禁止执行脚本
参考: npm : 无法加载文件 C:\Program Files\nodejs\node_global\npm.ps1,因为在此系统上禁止运行脚本.