添加角色属性查看

Views ->Shared->_Layout.cshtml

<div class="navbar-collapse collapse">
<ul class="nav navbar-nav">
  <li><a asp-area="" asp-controller="Home" asp-action="Index">Home</a></li>
  <li><a asp-area="" asp-controller="Home" asp-action="About">About</a></li>
  <li><a asp-area="" asp-controller="Home" asp-action="Contact">Contact</a></li>
  <li><a asp-area="" asp-controller="Account" asp-action="Index">Account</a></li>
  <li><a asp-area="" asp-controller="Claims" asp-action="Index">Claims</a></li>
  <li><a asp-area="" asp-controller="Role" asp-action="Index">Role</a></li> //加这句

Controllers ->RoleController.cs 新建

 using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc;
using IdentityMvc.Models;
using Microsoft.AspNetCore.Identity;
using Microsoft.AspNetCore.Authorization;
using IdentityMvc.Models.AccountViewModels;
using Microsoft.AspNetCore.Authentication;
using System.ComponentModel.DataAnnotations;
using Microsoft.EntityFrameworkCore;
using IdentityMvc.Models.RoleViewModels;
using System.Security.Claims; namespace IdentityMvc.Controllers
{
[Authorize]
public class RoleController : Controller
{
private readonly UserManager<ApplicationUser> _userManager;
private readonly RoleManager<ApplicationRole> _roleManager; public RoleController(UserManager<ApplicationUser> userManager,
RoleManager<ApplicationRole> roleManager)
{
_roleManager = roleManager;
_userManager = userManager;
}
[TempData]
public string ErrorMessage { get; set; } [HttpGet]
public ActionResult Index() { var dd = _roleManager.Roles.Include(d => d.UserRoles).Select(o => new
{
o.Id,
o.Name,
userlist = o.UserRoles.Select(t => t.UserId).ToList(),
}).Select(t => new {t.Id,t.Name,
useridlist = string.Join(",", t.userlist)
});
List<RoleViewModels> list = new List<RoleViewModels>(); foreach (var gg in dd)
{
var pp = _userManager.Users.Where(o => gg.useridlist.Contains(o.Id)).Select(o => o.UserName).ToList(); list.Add( new RoleViewModels { Id= gg.Id,Role=gg.Name, Name = string.Join(",", pp) }); } return View(list);
// return View(_roleManager.Roles.Include(d => d.UserRoles));
} [HttpGet]
public ActionResult Create() {
return View();
} [HttpPost]
public async Task<ActionResult> Create(RoleViewModels model)
{
if (ModelState.IsValid) {
IdentityResult result = await _roleManager.CreateAsync(new ApplicationRole{Name=model.Name});
if (result.Succeeded) { var officeClaim = new Claim("office", model.OfficeNumber.ToString(), ClaimValueTypes.String);
await _roleManager.AddClaimAsync(await _roleManager.FindByNameAsync(model.Name), officeClaim); return RedirectToAction("Index");
} else {
AddErrors(result);
}
}
return View(model);
} [HttpPost]
public async Task<ActionResult> Delete(string id) {
ApplicationRole role = await _roleManager.FindByIdAsync(id);
if (role != null) {
IdentityResult result = await _roleManager.DeleteAsync(role);
if (result.Succeeded) {
return RedirectToAction("Index");
} else {
return View("Error", result.Errors);
}
} else {
return View("Error", new string[] { "Role Not Found" });
}
} public async Task<ActionResult> Edit(string id) {
ApplicationRole role = await _roleManager.FindByIdAsync(id);
var temp = _roleManager.Roles.Include(d => d.UserRoles).Where(d => d.Id == id)
.Select(d => new
{
d.UserRoles
}).ToArray();
string[] memberID = temp[].UserRoles.Select(x => x.UserId).ToArray();
var members = _userManager.Users.Where(x => memberID.Any(y => y == x.Id));
var nonMembers = _userManager.Users.Except(members); return View(new RoleEditModel {
Role = role,
Members = members,
NonMembers = nonMembers
});
} [HttpPost]
public async Task<ActionResult> Edit(RoleModificationModel model) {
IdentityResult result;
if (ModelState.IsValid) {
foreach (string userId in model.IdsToAdd ?? new string[] { }) {
result = await _userManager.AddToRoleAsync(await _userManager.FindByIdAsync(userId), model.RoleName);
if (!result.Succeeded) {
return View("Error", result.Errors);
}
}
foreach (string userId in model.IdsToDelete ?? new string[] { }) {
result = await _userManager.RemoveFromRoleAsync(await _userManager.FindByIdAsync(userId),
model.RoleName);
if (!result.Succeeded) {
return View("Error", result.Errors);
}
}
return RedirectToAction("Index");
}
return View("Error", new string[] { "Role Not Found" });
} private void AddErrors(IdentityResult result)
{
foreach (var error in result.Errors)
{
ModelState.AddModelError(string.Empty, error.Description);
}
}
}
}

Models->RoleViewModels->RoleViewModels.cs 新建

 using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks; namespace IdentityMvc.Models.RoleViewModels
{
public class RoleViewModels
{
public string Id { get; set; } public string Name { get; set; } public string Role { get; set; } public string OfficeNumber { get; set; }
}
public class RoleEditModel
{
public ApplicationRole Role { get; set; }
public IEnumerable<ApplicationUser> Members { get; set; }
public IEnumerable<ApplicationUser> NonMembers { get; set; }
}
public class RoleModificationModel {
[Required]
public string RoleName { get; set; }
public string[] IdsToAdd { get; set; }
public string[] IdsToDelete { get; set; }
}
}

Views->Role->Create.cshtml

 @model RoleViewModels
@{ ViewBag.Title = "Create Role";}
<h2>Create Role</h2>
@Html.ValidationSummary(false)
@using (Html.BeginForm()) {
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
<span asp-validation-for="Name" class="text-danger"></span>
</div>
<div class="form-group">
<label asp-for="OfficeNumber" class="control-label"></label>
<input asp-for="OfficeNumber" class="form-control" />
<span asp-validation-for="OfficeNumber" class="text-danger"></span>
</div> <button type="submit" class="btn btn-primary">Create</button>
@Html.ActionLink("Cancel", "Index", null, new { @class = "btn btn-default" })
}

Views->Role->Edit.cshtml

 @model RoleEditModel
@{ ViewBag.Title = "Edit Role";}
@Html.ValidationSummary()
@using (Html.BeginForm()) {
<input type="hidden" name="roleName" value="@Model.Role.Name" />
<div class="panel panel-primary">
<div class="panel-heading">Add To @Model.Role.Name</div>
<table class="table table-striped">
@if (Model.NonMembers == null) {
<tr><td colspan="">All Users Are Members</td></tr>
} else {
<tr><td>User ID</td><td>Add To Role</td></tr>
foreach (ApplicationUser user in Model.NonMembers) {
<tr>
<td>@user.UserName</td>
<td>
<input type="checkbox" name="IdsToAdd" value="@user.Id">
</td>
</tr>
}
}
</table>
</div>
<div class="panel panel-primary">
<div class="panel-heading">Remove from @Model.Role.Name</div>
<table class="table table-striped">
@if (Model.Members == null) {
<tr><td colspan="">No Users Are Members</td></tr>
} else {
<tr><td>User ID</td><td>Remove From Role</td></tr>
foreach (ApplicationUser user in Model.Members) {
<tr>
<td>@user.UserName</td>
<td>
<input type="checkbox" name="IdsToDelete" value="@user.Id">
</td>
</tr>
}
}
</table>
</div>
<button type="submit" class="btn btn-primary">Save</button>
@Html.ActionLink("Cancel", "Index", null, new { @class = "btn btn-default" })
}

Views->Role->Index.cshtml

 @model IEnumerable<RoleViewModels>
@using IdentityMvc.App_Code
@{ ViewBag.Title = "Roles"; } <div class="panel panel-primary">
<div class="panel-heading">Roles</div>
<table class="table table-striped"> <tr><th>ID</th><th>Name</th><th>Users</th><th></th></tr>
@if (Model.Count() == ) {
<tr><td colspan="" class="text-center">No Roles</td></tr>
} else {
foreach (RoleViewModels role in Model) {
<tr>
<td>@role.Id</td>
<td>@role.Role</td>
<td>@role.Name
</td>
<td>
@using (Html.BeginForm("Delete", "Role",
new { id = role.Id })) {
@Html.ActionLink("Edit", "Edit", new { id = role.Id },
new { @class = "btn btn-primary btn-xs" })
<button class="btn btn-danger btn-xs"
type="submit">
Delete
</button>
}
</td>
</tr>
}
}
</table>
</div>
@Html.ActionLink("Create", "Create", null, new { @class = "btn btn-primary" })

Startup.cs->ConfigureServices

services.AddIdentity<ApplicationUser, IdentityRole>() ->   services.AddIdentity<ApplicationUser, ApplicationRole>()

mvc core2.1 Identity.EntityFramework Core ROle和用户绑定查看 (八)完成的更多相关文章

  1. mvc core2.1 Identity.EntityFramework Core 配置 (一)

    https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/customize_identity_model?view=a ...

  2. mvc core2.1 Identity.EntityFramework Core 实例配置 (四)

    https://docs.microsoft.com/zh-cn/aspnet/core/security/authentication/customize_identity_model?view=a ...

  3. mvc core2.1 Identity.EntityFramework Core 用户Claims查看(七)

    添加角色属性查看 Views ->Shared->_Layout.cshtml <div class="navbar-collapse collapse"> ...

  4. mvc core2.1 Identity.EntityFramework Core 导航状态栏(六)

    之前做的无法 登录退出,和状态,加入主页导航栏 Views ->Shared->_Layout.cshtml <div class="navbar-collapse col ...

  5. mvc core2.1 Identity.EntityFramework Core 注册 (二)

    Startup.cs-> Configure app.UseAuthentication(); //启动验证 Controllers->AccountController.cs 新建 us ...

  6. mvc core2.1 Identity.EntityFramework Core 用户列表预览 删除 修改 (五)

    用户列表预览 Controllers->AccountController.cs [HttpGet] public IActionResult Index() { return View(_us ...

  7. mvc core2.1 Identity.EntityFramework Core 登录 (三)

    Controllers->AccountController.cs 新建 [HttpGet] [AllowAnonymous] public async Task<IActionResul ...

  8. webapi core2.1 Identity.EntityFramework Core进行配置和操作数据 (一)没什么用

    https://docs.microsoft.com/en-us/aspnet/core/security/authentication/identity?view=aspnetcore-2.1&am ...

  9. webapi core2.1 IdentityServer4.EntityFramework Core进行配置和操作数据

    https://identityserver4.readthedocs.io/en/release/quickstarts/8_entity_framework.html 此连接的实践 vscode ...

随机推荐

  1. Java 方法重载 方法重写

    方法重载规则 参数个数不同 参数个数相同,但参数列表中对应的某个参数的类型不一样 方法的返回类型和参数名称不参与重载 "编译期绑定",,因为未产生对象,只看参数.引用类型绑定方法 ...

  2. bzoj4237

    题解: cdq分治 二位变成一维 二分一下 代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; ; ...

  3. 读书笔记 C#委托的BeginInvoke、EndInvoke之浅析

    c#中有一种类型叫委托,它是一种引用类型.可以引用静态与非静态的方法,且这些方法的参数列表和返回值类型必须与所声明的委托一致. 委托引用的方法可以通过BeginInvoke和EndInvoke来异步进 ...

  4. 【转载】java对象和byte数组互转,直接拿去用

    //加了了Optional防止空指针异常,加入了泛型,省去了强制转化 import java.io.*; import java.util.Optional; /** * Created by Jas ...

  5. Linux学习 :移植U-boot_2012.04.01到JZ2440开发板

    一.下载U-boot源码:ftp://ftp.denx.de/pub/u-boot/ 二.uboot的启动过程: 部分硬件初始化——>加载完整uboot到RAM——>跳转到第二阶段入口开始 ...

  6. 2.12 C++ explicit关键字详解

    参考:http://www.cnblogs.com/ymy124/p/3632634.html 总结: 带参数的构造函数中有两种比较常见的构造函数:拷贝构造函数和转型构造函数. 转型构造函数只有一个参 ...

  7. Mysql text类型的最大长度

    MySQL 3种text类型的最大长度如下: TEXT 65,535 bytes ~64kb MEDIUMTEXT 16,777,215 bytes ~16Mb LONGTEXT 4,294,967, ...

  8. html回顾随笔1(*^__^*)

    1.text—align 与float 区别: float是针对div一类的容器来说.text-align是对于容器里的文本或者图片来说靠左或靠右水平对齐(vlign 竖直方向) 要注意以下几点:   ...

  9. jmeter中添加压力机

    在压测的时候,可能并发比较大,一台机子已经启动不了那么多并发了,这个时候就是有多台机子一起来并发,就要添加压力机 如何添加压力机呢: 1.其他电脑上也安装了jmeter,和其他电脑都能ping通当前电 ...

  10. adb shell模拟点击事件(input tap)

    前言:appium定位也不是万能的,有些元素还是定位不到,这个时候只能换一个方式定位了,可以使用这个adb shell模拟点击. 1.input可以实现的功能 输入文本信息:input text gu ...