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 ...
随机推荐
- 漏洞分析:CVE 2021-3156
漏洞分析:CVE 2021-3156 漏洞简述 漏洞名称:sudo堆溢出本地提权 漏洞编号:CVE-2021-3156 漏洞类型:堆溢出 漏洞影响:本地提权 利用难度:较高 基础权限:需要普通用户权限 ...
- Java数组05——Arrays类
Arrays类讲解 package array; import java.util.Arrays; public class ArrayDemon07 { public static ...
- 面试利器!字节跳动2021年Android程序员面试指导小册已开源
整份手册分为两个部分,分别是:Java部分.Android部分.数据结构与算法篇.字节跳动2020年全年面试题总结篇! 每个知识点都有左侧导航书签页,看的时候十分方便,由于内容较多,这里就截取一部分图 ...
- HDFS(Hadoop Distributed File System )概述
目录 一.HDFS概述 二.HDFS特点 三.HDFS集群组成:主从架构---一个主节点,多个从节点 1. NameNode(名称节点 / 主节点)----- HDFS集群的管理者 2. DataNo ...
- dubbo学习实践(3)之Dubbo整合Consul及Dubbo配置方式
前言:上一篇中,已经写到了使用zookeeper为注册中心的配置,下面写下配置Consul为注册中心 1. Consul注册中心验证 修改provider和consumer的服务配置文件 Provid ...
- awk-07-IO和printf语句
IO语句 1.getline 2.getline var 把a文件的行,追加到b文件的结尾 把 a 文件的行替换 b 文件的指定字段 把 a 文件的行替换 b 文件的对应字段 3.command | ...
- JmoVxia
关于我 网名:季末微夏 英文:JmoVxia 签名:路漫漫其修远兮,吾将上下而求索 标签:iOS开发(ma)工程师(nong).技术爱好者 联系我 邮箱:JmoVxia@gmail.com Githu ...
- 更好地使用Atom支持基于Jupyter的Python开发
有关于使用Atom进行Python开发的网上资料比较少,最近发现使用Atom结合Hydrogen插件进行Python开发,尤其是数据挖掘相关的工作,整体体验要好于Vscode,Vscode虽然说也有连 ...
- Sqli-Labs less25-25a
less-25 前置基础知识:后面的关卡涉及到WAF绕过: 主要有三种方式:白盒绕过.黑盒绕过.fuzz测试 网上sql注入WAF绕过的教程有很多,可以自己查询,总之就是比谁思路猥琐 根据第25关下面 ...
- Git(12)-- Git 分支 - 分支简介
@ 目录 1.分支简介 1.1.初始化并首次提交 首次提交对象及其树结构: git 的 cat-file 的命令用法: 1.2.修改并第二次提交 第二次提交对象及其树结构: 1.3.修改并第三次提交 ...