by WebSurfer
13. February 2021 11:19
ASP.NET Core MVC アプリでユーザー認証・承認を行うのに ASP.NET Core Identity を利用するケースで、ロールにアサインされたユーザー一覧を表示するサンプルを書きます。

先の記事「ASP.NET Identity のロール管理 (CORE)」で、管理者がロールの表示・追加・変更・削除を行うためのサンプルを紹介しましたが、それの Details アクションメソッド / ビューに実装してみます。(先の記事では Details は未実装でした)
(1) ビューモデルの追加
コントローラーからビューに渡すモデルとして UsersInRole クラスを追加します。
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
// 追加
using Microsoft.AspNetCore.Identity;
using MySQLIdentity.Areas.Identity.Data;
namespace MySQLIdentity.Models
{
// ・・・中略(先の記事のコードと同じ)・・・
// 追加
public class UsersInRole
{
public IdentityRole Role { set; get; }
public IList<MySQLIdentityUser> Users { set; get; }
}
}
(2) Details アクションメソッドを追加
先の記事のコントローラー RoleController にアクションメソッド Details を追加します。
using System.Collections.Generic;
using System.Linq;
// ・・・中略(先の記事のコードと同じ)・・・
namespace MySQLIdentity.Controllers
{
public class RoleController : Controller
{
// ・・・中略(先の記事のコードと同じ)・・・
// 以下のアクションメソッドを追加
public async Task<IActionResult> Details(string id)
{
if (id == null)
{
return NotFound();
}
var role = await _roleManager.FindByIdAsync(id);
if (role == null)
{
return NotFound();
}
var model = new UsersInRole
{
Role = role,
Users = await _userManager.GetUsersInRoleAsync(role.Name)
};
return View(model);
}
// ・・・中略(先の記事のコードと同じ)・・・
}
}
(3) ビュー Details.cshtml を追加
@model MySQLIdentity.Models.UsersInRole
@{
ViewData["Title"] = "Details";
Layout = "~/Views/Shared/_Layout.cshtml";
}
<h1>Details</h1>
<h4>Users in Role "@Model.Role.Name"</h4>
<table class="table">
<thead>
<tr>
<th>
@Html.DisplayNameFor(model => model.Users.First().UserName)
</th>
<th>
@Html.DisplayNameFor(model => model.Users.First().HandleName)
</th>
<th>
@Html.DisplayNameFor(model => model.Users.First().PhoneNumber)
</th>
</tr>
</thead>
<tbody>
@foreach (var item in Model.Users)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => item.HandleName)
</td>
<td>
@Html.DisplayFor(modelItem => item.PhoneNumber)
</td>
</tr>
}
</tbody>
</table>
<p>
@Html.ActionLink("Edit", "Edit", new { id = Model.Role.Id }) |
@Html.ActionLink("Back to List", "Index")
</p>
一覧表示画面 Index の Details リンクをクリックし、Member ロールに属するユーザー一覧を表示したのが上の画像です。