mirror of
https://github.com/aljazceru/btcpayserver.git
synced 2025-12-17 14:04:26 +01:00
Optimize admin user list
This commit is contained in:
@@ -75,6 +75,7 @@ namespace BTCPayServer.Data
|
|||||||
|
|
||||||
// some of the data models don't have OnModelCreating for now, commenting them
|
// some of the data models don't have OnModelCreating for now, commenting them
|
||||||
|
|
||||||
|
ApplicationUser.OnModelCreating(builder);
|
||||||
AddressInvoiceData.OnModelCreating(builder);
|
AddressInvoiceData.OnModelCreating(builder);
|
||||||
APIKeyData.OnModelCreating(builder);
|
APIKeyData.OnModelCreating(builder);
|
||||||
AppData.OnModelCreating(builder);
|
AppData.OnModelCreating(builder);
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using Microsoft.AspNetCore.Identity;
|
using Microsoft.AspNetCore.Identity;
|
||||||
|
using Microsoft.EntityFrameworkCore;
|
||||||
|
|
||||||
namespace BTCPayServer.Data
|
namespace BTCPayServer.Data
|
||||||
{
|
{
|
||||||
@@ -18,5 +19,14 @@ namespace BTCPayServer.Data
|
|||||||
public List<NotificationData> Notifications { get; set; }
|
public List<NotificationData> Notifications { get; set; }
|
||||||
public List<UserStore> UserStores { get; set; }
|
public List<UserStore> UserStores { get; set; }
|
||||||
public List<Fido2Credential> Fido2Credentials { get; set; }
|
public List<Fido2Credential> Fido2Credentials { get; set; }
|
||||||
|
|
||||||
|
public List<IdentityUserRole<string>> UserRoles { get; set; }
|
||||||
|
|
||||||
|
public static void OnModelCreating(ModelBuilder builder)
|
||||||
|
{
|
||||||
|
builder.Entity<ApplicationUser>()
|
||||||
|
.HasMany<IdentityUserRole<string>>(user => user.UserRoles)
|
||||||
|
.WithOne().HasForeignKey(role => role.UserId);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,8 @@ namespace BTCPayServer.Controllers
|
|||||||
{
|
{
|
||||||
[Route("server/users")]
|
[Route("server/users")]
|
||||||
public async Task<IActionResult> ListUsers(
|
public async Task<IActionResult> ListUsers(
|
||||||
UsersViewModel model,
|
[FromServices] RoleManager<IdentityRole> roleManager,
|
||||||
|
UsersViewModel model,
|
||||||
string sortOrder = null
|
string sortOrder = null
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
@@ -50,7 +51,9 @@ namespace BTCPayServer.Controllers
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
model.Roles = roleManager.Roles.ToDictionary(role => role.Id, role => role.Name);
|
||||||
model.Users = await usersQuery
|
model.Users = await usersQuery
|
||||||
|
.Include(user => user.UserRoles)
|
||||||
.Skip(model.Skip)
|
.Skip(model.Skip)
|
||||||
.Take(model.Count)
|
.Take(model.Count)
|
||||||
.Select(u => new UsersViewModel.UserViewModel
|
.Select(u => new UsersViewModel.UserViewModel
|
||||||
@@ -59,16 +62,11 @@ namespace BTCPayServer.Controllers
|
|||||||
Email = u.Email,
|
Email = u.Email,
|
||||||
Id = u.Id,
|
Id = u.Id,
|
||||||
Verified = u.EmailConfirmed || !u.RequiresEmailConfirmation,
|
Verified = u.EmailConfirmed || !u.RequiresEmailConfirmation,
|
||||||
Created = u.Created
|
Created = u.Created,
|
||||||
|
Roles = u.UserRoles.Select(role => role.RoleId)
|
||||||
})
|
})
|
||||||
.ToListAsync();
|
.ToListAsync();
|
||||||
model.Total = await usersQuery.CountAsync();
|
model.Total = await usersQuery.CountAsync();
|
||||||
|
|
||||||
foreach (UsersViewModel.UserViewModel uvm in model.Users)
|
|
||||||
{
|
|
||||||
var userId = await _UserManager.FindByIdAsync(uvm.Id);
|
|
||||||
uvm.IsAdmin = await _userService.IsAdminUser(userId);;
|
|
||||||
}
|
|
||||||
|
|
||||||
return View(model);
|
return View(model);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -13,8 +13,10 @@ namespace BTCPayServer.Models.ServerViewModels
|
|||||||
public bool Verified { get; set; }
|
public bool Verified { get; set; }
|
||||||
public bool IsAdmin { get; set; }
|
public bool IsAdmin { get; set; }
|
||||||
public DateTimeOffset? Created { get; set; }
|
public DateTimeOffset? Created { get; set; }
|
||||||
|
public IEnumerable<string> Roles { get; set; }
|
||||||
}
|
}
|
||||||
public List<UserViewModel> Users { get; set; } = new List<UserViewModel>();
|
public List<UserViewModel> Users { get; set; } = new List<UserViewModel>();
|
||||||
|
public Dictionary<string, string> Roles { get; set; }
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -64,9 +64,9 @@
|
|||||||
<tr>
|
<tr>
|
||||||
<td class="d-flex align-items-center">
|
<td class="d-flex align-items-center">
|
||||||
<span class="me-2">@user.Email</span>
|
<span class="me-2">@user.Email</span>
|
||||||
@if (user.IsAdmin)
|
@foreach (var role in user.Roles)
|
||||||
{
|
{
|
||||||
<span class="badge bg-info">Admin</span>
|
<span class="badge bg-info">@Model.Roles[role]</span>
|
||||||
}
|
}
|
||||||
</td>
|
</td>
|
||||||
<td>@user.Created?.ToBrowserDate()</td>
|
<td>@user.Created?.ToBrowserDate()</td>
|
||||||
|
|||||||
Reference in New Issue
Block a user