Tenant Verwijderen
Verwijder een tenant en alle gerelateerde gegevens permanent. Deze handeling vereist drievoudige verificatie voor veiligheid.
BELANGRIJK: Alle endpoints op deze pagina vereisen een Global API Key. Dit is een gevaarlijke handeling die niet ongedaan gemaakt kan worden.
Tenant Verwijderen
DELETE /api/tenant
Verwijdert een tenant en alle gerelateerde gegevens permanent. Vereist drievoudige verificatie voor veiligheid.
WAARSCHUWING
Deze operatie is NIET OMKEERBAAR. Alle tenantgegevens worden permanent verwijderd, inclusief:
- Alle projecten en hun datasets
- Alle onderzoeken, notitieboeken en dashboards
- Blob storage container en bestanden
- Database records en instellingen
- Gebruikers toewijzingen aan de tenant (gebruikers zelf worden niet verwijderd)
Exporteer altijd belangrijke gegevens voordat u een tenant verwijdert.
Request Body
{
"tenantId": "12345678-1234-1234-1234-123456789012",
"name": "acme-corp",
"displayName": "Acme Corporation"
}
Drievoudige Verificatie
Alle drie de identifiers moeten exact overeenkomen om de verwijdering door te laten gaan:
| Veld | Type | Vereist | Beschrijving |
|---|---|---|---|
tenantId |
GUID | Ja | Tenant-ID om te verwijderen |
name |
string | Ja | Tenant-naam (moet exact overeenkomen) |
displayName |
string | Ja | Weergavenaam (moet exact overeenkomen) |
Deze drievoudige verificatie voorkomt per ongeluk verwijderen door te eisen dat u alle drie de identifiers kent en bevestigt.
Response (200 OK)
{
"message": "Tenant 'Acme Corporation' deleted successfully",
"tenantName": "acme-corp",
"tenantDisplayName": "Acme Corporation",
"storageContainerDeleted": true
}
Response Velden
| Veld | Type | Beschrijving |
|---|---|---|
message |
string | Bevestigingsbericht succes |
tenantName |
string | De systeemnaam van de verwijderde tenant |
tenantDisplayName |
string | De weergavenaam van de verwijderde tenant |
storageContainerDeleted |
boolean | Of de blob opslag is verwijderd |
Foutantwoorden
Niet Gevonden (404)
{
"error": "Tenant not found with ID '12345678-1234-1234-1234-123456789012'"
}
Verificatie Gefaald (400)
Als de tenantnaam niet overeenkomt:
{
"error": "Tenant name 'wrong-name' does not match the tenant with ID '12345678-1234-1234-1234-123456789012'. Expected 'acme-corp'.",
"hint": "All three identifiers (ID, name, display name) must match exactly for safety"
}
Als de weergavenaam niet overeenkomt:
{
"error": "Display name 'Wrong Name' does not match the tenant with ID '12345678-1234-1234-1234-123456789012'. Expected 'Acme Corporation'.",
"hint": "All three identifiers (ID, name, display name) must match exactly for safety"
}
Ongeautoriseerd (401)
{
"error": "This endpoint requires a Global API key.",
"hint": "Global API keys can be created at /admin/global-api-keys"
}
Implementatie Voorbeelden
cURL
# Tenant verwijderen (vereist drievoudige verificatie)
curl -X DELETE "https://your-mindzie-instance.com/api/tenant" \
-H "Authorization: Bearer YOUR_GLOBAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tenantId": "12345678-1234-1234-1234-123456789012",
"name": "test-tenant",
"displayName": "Test Tenant"
}'
Python
import requests
BASE_URL = 'https://your-mindzie-instance.com'
class TenantDeleter:
def __init__(self, global_api_key):
"""Initialiseer met een GLOBAL API-sleutel (niet tenant-specifiek)."""
self.headers = {
'Authorization': f'Bearer {global_api_key}',
'Content-Type': 'application/json'
}
def get_tenant(self, tenant_id):
"""Haalt tenantgegevens op voor verificatie."""
url = f'{BASE_URL}/api/tenant/{tenant_id}'
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
def delete_tenant(self, tenant_id, name, display_name, confirm=False):
"""
Verwijdert een tenant met drievoudige verificatie.
Args:
tenant_id: De tenant GUID
name: De systeemnaam van de tenant (moet exact overeenkomen)
display_name: De weergavenaam van de tenant (moet exact overeenkomen)
confirm: Zet op True om daadwerkelijk te verwijderen
"""
if not confirm:
# Verificatiemodus - controleer of waarden overeenkomen
tenant = self.get_tenant(tenant_id)
errors = []
if tenant['name'] != name:
errors.append(f"Naam komt niet overeen: verwacht '{tenant['name']}', kreeg '{name}'")
if tenant['displayName'] != display_name:
errors.append(f"Weergavenaam komt niet overeen: verwacht '{tenant['displayName']}', kreeg '{display_name}'")
if errors:
raise ValueError("Verificatie mislukt:\n" + "\n".join(errors))
print(f"Verificatie geslaagd voor tenant '{display_name}' ({name})")
print(f" - ID: {tenant_id}")
print(f" - Gebruikers: {tenant.get('userCount', 'N/B')}")
print(f" - Cases: {tenant.get('caseCount', 'N/B')}")
print("\nRoep aan met confirm=True om door te gaan met verwijderen.")
return None
# Voer de verwijdering uit
url = f'{BASE_URL}/api/tenant'
payload = {
'tenantId': tenant_id,
'name': name,
'displayName': display_name
}
response = requests.delete(url, json=payload, headers=self.headers)
if response.ok:
return response.json()
elif response.status_code == 404:
raise Exception(f'Tenant niet gevonden: {tenant_id}')
elif response.status_code == 400:
error = response.json()
raise Exception(f"Verificatie mislukt: {error.get('error', 'Onbekende fout')}")
else:
raise Exception(f'Verwijderen tenant mislukt: {response.text}')
# Gebruik - Veilige verwijder workflow
deleter = TenantDeleter('your-global-api-key')
tenant_id = '12345678-1234-1234-1234-123456789012'
tenant_name = 'test-tenant'
display_name = 'Test Tenant'
# Stap 1: Verifiëren (geen verwijdering)
try:
deleter.delete_tenant(tenant_id, tenant_name, display_name, confirm=False)
except ValueError as e:
print(f"Verificatie mislukt: {e}")
exit(1)
# Stap 2: Verwijderen bevestigen (uitcommentaar wanneer klaar)
# result = deleter.delete_tenant(tenant_id, tenant_name, display_name, confirm=True)
# print(f"Verwijderd: {result['message']}")
JavaScript
const BASE_URL = 'https://your-mindzie-instance.com';
class TenantDeleter {
constructor(globalApiKey) {
this.headers = {
'Authorization': `Bearer ${globalApiKey}`,
'Content-Type': 'application/json'
};
}
async getTenant(tenantId) {
const url = `${BASE_URL}/api/tenant/${tenantId}`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) throw new Error(`Opvragen tenant mislukt: ${response.status}`);
return await response.json();
}
async deleteTenant(tenantId, name, displayName, confirm = false) {
if (!confirm) {
// Verificatiemodus
const tenant = await this.getTenant(tenantId);
const errors = [];
if (tenant.name !== name) {
errors.push(`Naam komt niet overeen: verwacht '${tenant.name}', kreeg '${name}'`);
}
if (tenant.displayName !== displayName) {
errors.push(`Weergavenaam komt niet overeen: verwacht '${tenant.displayName}', kreeg '${displayName}'`);
}
if (errors.length > 0) {
throw new Error('Verificatie mislukt:\n' + errors.join('\n'));
}
console.log(`Verificatie geslaagd voor tenant '${displayName}' (${name})`);
console.log(` - ID: ${tenantId}`);
console.log(` - Gebruikers: ${tenant.userCount || 'N/B'}`);
console.log('\nRoep aan met confirm=true om door te gaan met verwijderen.');
return null;
}
// Voer de verwijdering uit
const url = `${BASE_URL}/api/tenant`;
const response = await fetch(url, {
method: 'DELETE',
headers: this.headers,
body: JSON.stringify({ tenantId, name, displayName })
});
if (response.ok) {
return await response.json();
}
const error = await response.json();
throw new Error(error.error || `Verwijderen mislukt: ${response.status}`);
}
}
// Gebruik - Veilige verwijder workflow
const deleter = new TenantDeleter('your-global-api-key');
const tenantId = '12345678-1234-1234-1234-123456789012';
const tenantName = 'test-tenant';
const displayName = 'Test Tenant';
// Stap 1: Verifiëren (geen verwijdering)
try {
await deleter.deleteTenant(tenantId, tenantName, displayName, false);
} catch (e) {
console.error(`Verificatie mislukt: ${e.message}`);
process.exit(1);
}
// Stap 2: Verwijderen bevestigen (uitcommentaar wanneer klaar)
// const result = await deleter.deleteTenant(tenantId, tenantName, displayName, true);
// console.log(`Verwijderd: ${result.message}`);
Veiligheidsrichtlijnen
Voor Verwijderen
- Exporteer Alle Data: Gebruik de Project API om alle projecten als .mpz-bestanden te exporteren
- Controleer Gebruikers: Kijk welke gebruikers zijn toegewezen en informeer hen
- Documenteer: Noteer wat wordt verwijderd en waarom voor auditdoeleinden
- Dubbelcheck: Controleer dat tenant-ID, naam en weergavenaam correct zijn
Tijdens Verwijderen
- Gebruik het Verificatiepatroon: Roep het delete-endpoint eerst aan in verificatiemodus
- Controleer Antwoord: Verifieer dat het antwoord de juiste tenantgegevens toont
- Bevestig Bewust: Geef alleen
confirm=Truedoor na handmatige verificatie
Na Verwijderen
- Verifieer Verwijdering: Controleer dat de tenant niet meer verschijnt in de tenantlijst
- Controleer Gebruikers: Controleer dat getroffen gebruikers geen toegang meer hebben tot de verwijderde tenant
- Werk Documentatie Bij: Noteer de verwijdering in je systeemdocumentatie
Alternatief: Uitschakelen in Plaats van Verwijderen
Overweeg een tenant uit te schakelen in plaats van te verwijderen om data te behouden en toch de toegang te blokkeren:
# Tenant uitschakelen (data blijft behouden)
curl -X PUT "https://your-mindzie-instance.com/api/tenant" \
-H "Authorization: Bearer YOUR_GLOBAL_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"tenantId": "12345678-1234-1234-1234-123456789012",
"isDisabled": true
}'
Uitgeschakelde tenants:
- Gebruikers kunnen niet inloggen op de tenant
- Alle data blijft behouden
- Kan later opnieuw ingeschakeld worden door
isDisabled: falsete zetten - Verschijnt in de tenantlijst met
isDisabled: true
Dit is vaak een veiligere keuze dan permanente verwijdering.