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 ...
随机推荐
- gitlab维护之修改clone地址
因为配置了域名访问gitlab私有仓库,但是在项目clone这里,显示的还是ip地址,并且还带端口,每次访问,clone都需要自己修改,比较不方便. 修改方法: sudo vim /opt/gitla ...
- GooseFS助力大数据业务数倍提升计算能力
前言 GooseFS是由腾讯云推出的一款分布式缓存方案,主要针对包括需要缓存加速的数据湖业务场景,提供基于对象存储COS服务的近计算端数据加速层. GooseFS 基于开源大数据缓存方案 Alluxi ...
- 手动实现instanceof函数
instanceof 功能 a instanceof b 官方解释为检查构造函数b的prototype 有没有出现在a的原型链上.比如: function A() { } function B() { ...
- Vulhub-DC-2靶场
Vulhub-DC-2靶场 前言 最近一直忙于学习代码审计和内网渗透,所以靶场这方面的文章一直未更新,但是计划是更新完DC系列靶场的,这个不会鸽. DC-2的靶场是很简单的一共5个flag. 正文 f ...
- Xmind-xss漏洞复现并上线Coblat-strike
前言:本漏洞由WebRay烽火台实验室发现,Xmind2020存在xss漏洞,并且可以进行任意代码执行,目前官方还未进行补丁修复,所以请目前Xmind用户警惕Xmind文件. 本博客讲复现漏洞及上线到 ...
- SpringBoot报错:Error starting ApplicationContext. To display the conditions report re-run your application with 'debug' enabled.
Spring Boot报错:Error starting ApplicationContext. To display the conditions report re-run your applic ...
- Linux从头学08:Linux 是如何保护内核代码的?【从实模式到保护模式】
作 者:道哥,10+年的嵌入式开发老兵. 公众号:[IOT物联网小镇],专注于:C/C++.Linux操作系统.应用程序设计.物联网.单片机和嵌入式开发等领域. 公众号回复[书籍],获取 Linux. ...
- redis的过期策略和淘汰策略
过期键删除策略 1.定时删除:在设置键的过期时间的同时,创建一个定时器timer,让定时器在键过期时间来临时,立即执行对键的删除操作. 2.惰性删除:放任键过期不管,但是每次从键空间中获取键时,都检查 ...
- windows10右键我的电脑,点击管理,提示该文件没有与之关联的应用来执行该操作,请安装应用,若已经安装应用,请在默认应用设置页面中创建关联……
方法一 1.按WIN+R 调出运行对话框,然后输入bai gpedit.msc 回车:2.展开"计du算机配置"zhi-"Windows设置"-"安全 ...
- mfc HackerTools远程线程注入
在一个进程中,调用CreateThread或CreateRemoteThreadEx函数,在另一个进程内创建一个线程(因为不在同一个进程中,所以叫做远程线程).创建的线程一般为Windows API函 ...