fix: delete all related data when removing user
This commit is contained in:
@@ -20,6 +20,10 @@ import {
|
|||||||
commandHistory,
|
commandHistory,
|
||||||
roles,
|
roles,
|
||||||
userRoles,
|
userRoles,
|
||||||
|
hostAccess,
|
||||||
|
sharedCredentials,
|
||||||
|
auditLogs,
|
||||||
|
sessionRecordings,
|
||||||
} from "../db/schema.js";
|
} from "../db/schema.js";
|
||||||
import { eq, and } from "drizzle-orm";
|
import { eq, and } from "drizzle-orm";
|
||||||
import bcrypt from "bcryptjs";
|
import bcrypt from "bcryptjs";
|
||||||
@@ -141,6 +145,29 @@ const requireAdmin = authManager.createAdminMiddleware();
|
|||||||
|
|
||||||
async function deleteUserAndRelatedData(userId: string): Promise<void> {
|
async function deleteUserAndRelatedData(userId: string): Promise<void> {
|
||||||
try {
|
try {
|
||||||
|
// Delete shared credentials first (depends on hostAccess)
|
||||||
|
await db
|
||||||
|
.delete(sharedCredentials)
|
||||||
|
.where(eq(sharedCredentials.targetUserId, userId));
|
||||||
|
|
||||||
|
// Delete session recordings (depends on hostAccess)
|
||||||
|
await db
|
||||||
|
.delete(sessionRecordings)
|
||||||
|
.where(eq(sessionRecordings.userId, userId));
|
||||||
|
|
||||||
|
// Delete host access records (both granted by and granted to this user)
|
||||||
|
await db.delete(hostAccess).where(eq(hostAccess.userId, userId));
|
||||||
|
await db.delete(hostAccess).where(eq(hostAccess.grantedBy, userId));
|
||||||
|
|
||||||
|
// Delete sessions
|
||||||
|
await db.delete(sessions).where(eq(sessions.userId, userId));
|
||||||
|
|
||||||
|
// Delete user roles
|
||||||
|
await db.delete(userRoles).where(eq(userRoles.userId, userId));
|
||||||
|
|
||||||
|
// Delete audit logs
|
||||||
|
await db.delete(auditLogs).where(eq(auditLogs.userId, userId));
|
||||||
|
|
||||||
await db
|
await db
|
||||||
.delete(sshCredentialUsage)
|
.delete(sshCredentialUsage)
|
||||||
.where(eq(sshCredentialUsage.userId, userId));
|
.where(eq(sshCredentialUsage.userId, userId));
|
||||||
|
|||||||
Reference in New Issue
Block a user