Harden audit privacy and admin modals
This commit is contained in:
@@ -20,8 +20,9 @@ public static class AdminDashboardEndpoints
|
||||
return group;
|
||||
}
|
||||
|
||||
private static async Task<IResult> GetDashboard(AwardsDbContext db)
|
||||
private static async Task<IResult> GetDashboard(AwardsDbContext db, HttpContext context)
|
||||
{
|
||||
var canViewAuditIp = CanViewAuditIp(context);
|
||||
var currentSeason = await db.Seasons.AsNoTracking().FirstOrDefaultAsync(item => item.IsCurrent);
|
||||
if (currentSeason is null)
|
||||
{
|
||||
@@ -68,7 +69,7 @@ public static class AdminDashboardEndpoints
|
||||
item.Summary,
|
||||
item.CreatedAt,
|
||||
item.MetadataJson,
|
||||
item.CreatedFromIp,
|
||||
canViewAuditIp ? item.CreatedFromIp : null,
|
||||
item.UserAgent))
|
||||
.ToArrayAsync();
|
||||
|
||||
@@ -101,10 +102,12 @@ public static class AdminDashboardEndpoints
|
||||
DateTimeOffset? from,
|
||||
DateTimeOffset? to,
|
||||
string? cursor,
|
||||
AwardsDbContext db)
|
||||
AwardsDbContext db,
|
||||
HttpContext context)
|
||||
{
|
||||
var normalizedLimit = Math.Clamp(limit ?? 100, 1, 500);
|
||||
var search = query?.Trim();
|
||||
var canViewAuditIp = CanViewAuditIp(context);
|
||||
var auditQuery = db.AdminAuditEntries.AsNoTracking();
|
||||
|
||||
if (!TryDecodeAuditCursor(cursor, out var decodedCursor))
|
||||
@@ -122,8 +125,8 @@ public static class AdminDashboardEndpoints
|
||||
EF.Functions.ILike(item.EntityId, pattern) ||
|
||||
EF.Functions.ILike(item.Summary, pattern) ||
|
||||
EF.Functions.ILike(item.MetadataJson, pattern) ||
|
||||
EF.Functions.ILike(item.CreatedFromIp, pattern) ||
|
||||
EF.Functions.ILike(item.UserAgent, pattern));
|
||||
EF.Functions.ILike(item.UserAgent, pattern) ||
|
||||
(canViewAuditIp && EF.Functions.ILike(item.CreatedFromIp, pattern)));
|
||||
}
|
||||
|
||||
if (!string.IsNullOrWhiteSpace(admin))
|
||||
@@ -176,7 +179,7 @@ public static class AdminDashboardEndpoints
|
||||
item.Summary,
|
||||
item.CreatedAt,
|
||||
item.MetadataJson,
|
||||
item.CreatedFromIp,
|
||||
canViewAuditIp ? item.CreatedFromIp : null,
|
||||
item.UserAgent))
|
||||
.ToArrayAsync();
|
||||
|
||||
@@ -197,6 +200,9 @@ public static class AdminDashboardEndpoints
|
||||
private static string EncodeAuditCursor(AdminAuditEntryDto entry) =>
|
||||
$"{entry.CreatedAt.UtcTicks}:{entry.Id}";
|
||||
|
||||
private static bool CanViewAuditIp(HttpContext context) =>
|
||||
AdminRoles.IsPrivilegedFullControlRole(context.GetCurrentSession()?.Role);
|
||||
|
||||
private static bool TryDecodeAuditCursor(string? cursor, out AuditCursor? decodedCursor)
|
||||
{
|
||||
decodedCursor = null;
|
||||
|
||||
Reference in New Issue
Block a user