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 ...
随机推荐
- C++ //多态案例三 ---电脑组装
1 //多态案例三 ---电脑组装 2 3 #include <iostream> 4 #include <string> 5 using namespace std; 6 7 ...
- 做了两年多的安卓,突然想转Java后端,感觉Android职业前景不太好,转还是不转?
近几年相信很多Android开发者都有过这种想法,最终还是有些Android 开发选择了转行,但是还有些开发者选择了坚持. 因为现在Android开发确实竞争很大,很多公司抛出几个岗位,每天能收到成百 ...
- 太细了!阿里十年技术专家联合打造“最新”Jetpack强化实战手册
前言 提到Android架构,我们首先想到的是MVC,MVP,MVVM.他们主要是针对视图和模型的.随着Android的发展,从原来的框架很少,全是自己动手撸.到现在框架越来越多,选型也越来越多,导致 ...
- MyBatis学习04(注解开发)
7.使用注解开发 7.1 面向接口编程 根本原因 : 解耦 , 可拓展 , 提高复用 , 分层开发中 , 上层不用管具体的实现 , 大家都遵守共同的标准 , 使得开发变得容易 , 规范性更好 在一个面 ...
- netty系列之:内置的Frame detection
目录 简介 Frame detection DelimiterBasedFrameDecoder FixedLengthFrameDecoder LengthFieldBasedFrameDecode ...
- [11 Go语言基础-可变参数函数]
[11 Go语言基础-可变参数函数] 可变参数函数 什么是可变参数函数 可变参数函数是一种参数个数可变的函数. 语法 如果函数最后一个参数被记作 ...T ,这时函数可以接受任意个 T 类型参数作为最 ...
- MySQL指定ip和端口连接数据库,并修改数据库密码
一.指定ip和端口连接数据库 命令 mysql -u root -h (ip) -P (端口)-p 假设ip是:127.0.0.1:端口是:13326,连接的命令: mysql -u root -h ...
- Vmware15的安装以及Ubunt的在虚拟机上的安装
一.vmware15安装 1.百度网盘地址 链接:https://pan.baidu.com/s/1Lgez57n50QEW97HNdYZCfQ 提取码:9wvy 2.下载到本地后 3.双击安装程序 ...
- jpa 指定字段内容按照顺序排序(orderBy when then)
query.orderBy( criteriaBuilder.desc( criteriaBuilder.selectCase() .when(criteriaBuilder.equal(root.g ...
- 基于css的一些动画
最近因为期末复习周,博客更新鸽了很久,趁着考完试还记得这件事,把之前的大作业里出现过的css动画总结一下 页脚的联系方式图标 这个图片原型是一个静态图 动画效果如下 html <div clas ...