Kiracı Silme
Bir kiracıyı ve tüm ilgili verileri kalıcı olarak silin. Bu işlem güvenlik için üçlü doğrulama gerektirir.
ÖNEMLİ: Bu sayfadaki tüm uç noktalar Global API Anahtarı gerektirir. Bu tehlikeli bir işlemdir ve geri alınamaz.
Kiracı Sil
DELETE /api/tenant
Bir kiracıyı ve tüm ilgili verileri kalıcı olarak siler. Güvenlik için üçlü doğrulama gerektirir.
UYARI
Bu işlem GERİ ALINAMAZ. Tüm kiracı verileri kalıcı olarak silinecektir, bunlar şunları içerir:
- Tüm projeler ve veri setleri
- Tüm araştırmalar, not defterleri ve panolar
- Blob depolama konteyneri ve dosyaları
- Veritabanı kayıtları ve ayarları
- Kiracıya atanmış kullanıcılar (kullanıcıların kendileri silinmez)
Kiracıyı silmeden önce önemli verileri her zaman dışa aktarın.
İstek Gövdesi
{
"tenantId": "12345678-1234-1234-1234-123456789012",
"name": "acme-corp",
"displayName": "Acme Corporation"
}
Üçlü Doğrulama
Silme işleminin devam etmesi için tüm üç tanımlayıcının tam olarak eşleşmesi gerekir:
| Alan | Tip | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Silinecek kiracı ID'si |
name |
string | Evet | Kiracı adı (tam olarak eşleşmeli) |
displayName |
string | Evet | Görünen ad (tam olarak eşleşmeli) |
Bu üçlü doğrulama, tüm üç tanımlayıcıyı bilmenizi ve onaylamanızı gerektirerek yanlışlıkla silinmeleri engeller.
Yanıt (200 OK)
{
"message": "Tenant 'Acme Corporation' deleted successfully",
"tenantName": "acme-corp",
"tenantDisplayName": "Acme Corporation",
"storageContainerDeleted": true
}
Yanıt Alanları
| Alan | Tip | Açıklama |
|---|---|---|
message |
string | Başarı onay mesajı |
tenantName |
string | Silinen kiracının sistem adı |
tenantDisplayName |
string | Silinen kiracının görünen adı |
storageContainerDeleted |
boolean | Blob depolamanın silinip silinmediği |
Hata Yanıtları
Bulunamadı (404)
{
"error": "Tenant not found with ID '12345678-1234-1234-1234-123456789012'"
}
Doğrulama Hatası (400)
Kiracı adı eşleşmediğinde:
{
"error": "Tenant name 'wrong-name' does not match the tenant with ID '12345678-1234-1234-1234-123456789012'. Expected 'acme-corp'.",
"hint": "Tüm üç tanımlayıcı (ID, ad, görünen ad) tam olarak eşleşmeli"
}
Görünen ad eşleşmediğinde:
{
"error": "Display name 'Wrong Name' does not match the tenant with ID '12345678-1234-1234-1234-123456789012'. Expected 'Acme Corporation'.",
"hint": "Tüm üç tanımlayıcı (ID, ad, görünen ad) tam olarak eşleşmeli"
}
Yetkisiz (401)
{
"error": "This endpoint requires a Global API key.",
"hint": "Global API anahtarları /admin/global-api-keys adresinden oluşturulabilir"
}
Uygulama Örnekleri
cURL
# Kiracıyı sil (üçlü doğrulama gerektirir)
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):
"""GLOBAL API anahtarı ile başlatılır (kiracıya özgü değil)."""
self.headers = {
'Authorization': f'Bearer {global_api_key}',
'Content-Type': 'application/json'
}
def get_tenant(self, tenant_id):
"""Doğrulama için kiracı detaylarını alır."""
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):
"""
Üçlü doğrulama ile kiracı siler.
Argümanlar:
tenant_id: Kiracı GUID
name: Kiracı sistem adı (tam eşleşmeli)
display_name: Kiracı görünen adı (tam eşleşmeli)
confirm: Silme işlemini gerçekştirmek için True yapın
"""
if not confirm:
# Doğrulama modu - değerlerin eşleşip eşleşmediğini kontrol et
tenant = self.get_tenant(tenant_id)
errors = []
if tenant['name'] != name:
errors.append(f"Ad uyuşmazlığı: beklenen '{tenant['name']}', alınan '{name}'")
if tenant['displayName'] != display_name:
errors.append(f"Görünen ad uyuşmazlığı: beklenen '{tenant['displayName']}', alınan '{display_name}'")
if errors:
raise ValueError("Doğrulama başarısız:\n" + "\n".join(errors))
print(f"'{display_name}' ({name}) kiracısı doğrulaması geçti")
print(f" - ID: {tenant_id}")
print(f" - Kullanıcı sayısı: {tenant.get('userCount', 'N/A')}")
print(f" - Durum sayısı: {tenant.get('caseCount', 'N/A')}")
print("\nSilmek için confirm=True ile çağırın.")
return None
# Silme işlemini yap
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'Kiracı bulunamadı: {tenant_id}')
elif response.status_code == 400:
error = response.json()
raise Exception(f"Doğrulama başarısız: {error.get('error', 'Bilinmeyen hata')}")
else:
raise Exception(f'Kiracı silme başarısız: {response.text}')
# Kullanım - Güvenli silme iş akışı
deleter = TenantDeleter('your-global-api-key')
tenant_id = '12345678-1234-1234-1234-123456789012'
tenant_name = 'test-tenant'
display_name = 'Test Tenant'
# Adım 1: Doğrula (silme olmaz)
try:
deleter.delete_tenant(tenant_id, tenant_name, display_name, confirm=False)
except ValueError as e:
print(f"Doğrulama başarısız: {e}")
exit(1)
# Adım 2: Silmeyi onayla (hazır olduğunda yorumu kaldırın)
# result = deleter.delete_tenant(tenant_id, tenant_name, display_name, confirm=True)
# print(f"Silindi: {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(`Kiracı alınamadı: ${response.status}`);
return await response.json();
}
async deleteTenant(tenantId, name, displayName, confirm = false) {
if (!confirm) {
// Doğrulama modu
const tenant = await this.getTenant(tenantId);
const errors = [];
if (tenant.name !== name) {
errors.push(`Ad uyuşmazlığı: beklenen '${tenant.name}', alınan '${name}'`);
}
if (tenant.displayName !== displayName) {
errors.push(`Görünen ad uyuşmazlığı: beklenen '${tenant.displayName}', alınan '${displayName}'`);
}
if (errors.length > 0) {
throw new Error('Doğrulama başarısız:\n' + errors.join('\n'));
}
console.log(`'${displayName}' (${name}) kiracısı doğrulaması geçti`);
console.log(` - ID: ${tenantId}`);
console.log(` - Kullanıcılar: ${tenant.userCount || 'N/A'}`);
console.log('\nSilmek için confirm=true ile çağırın.');
return null;
}
// Silme işlemini yap
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 || `Silme başarısız: ${response.status}`);
}
}
// Kullanım - Güvenli silme iş akışı
const deleter = new TenantDeleter('your-global-api-key');
const tenantId = '12345678-1234-1234-1234-123456789012';
const tenantName = 'test-tenant';
const displayName = 'Test Tenant';
// Adım 1: Doğrula (silme olmaz)
try {
await deleter.deleteTenant(tenantId, tenantName, displayName, false);
} catch (e) {
console.error(`Doğrulama başarısız: ${e.message}`);
process.exit(1);
}
// Adım 2: Silmeyi onayla (hazır olduğunda yorumu kaldırın)
// const result = await deleter.deleteTenant(tenantId, tenantName, displayName, true);
// console.log(`Silindi: ${result.message}`);
Güvenlik için En İyi Uygulamalar
Silmeden Önce
- Tüm Verileri Dışa Aktar: Proje API'si kullanarak tüm projeleri .mpz dosyası olarak dışa aktarın
- Kullanıcıları Doğrula: Hangi kullanıcıların atandığını kontrol edin ve onları bilgilendirin
- Belgeleyin: Denetim amaçlı neyin neden silindiğini kaydedin
- Çift Kontrol Yapın: Kiracı ID'sinin, adının ve görünen adının doğru olduğundan emin olun
Silme Esnasında
- Doğrulama Modelini Kullanın: Önce sadece doğrulama modunda silme uç noktasını çağırın
- Yanıtı Kontrol Edin: Yanıtın doğru kiracı bilgilerini gösterdiğinden emin olun
- Kasdetli Onay Verin: Sadece manuel doğrulamadan sonra
confirm=Trueparametresini geçirin
Sildikten Sonra
- Silindiğini Doğrula: Kiracının artık kiracılar listesinde olmadığını kontrol edin
- Kullanıcıları Kontrol Edin: Etkilenen kullanıcıların silinen kiracıya erişemediğini kontrol edin
- Belgelendirmeyi Güncelleyin: Silme işlemini sistem dokümantasyonunuza kaydedin
Alternatif: Silmek Yerine Devre Dışı Bırakma
Kiracı verilerini korurken erişimi engellemek için kiracıyı silmek yerine devre dışı bırakmayı düşünün:
# Kiracı devre dışı bırakma (veriler korunur)
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
}'
Devre dışı bırakılmış kiracılar:
- Kullanıcılar kiracıya giriş yapamaz
- Tüm veriler korunur
isDisabled: falseayarlanarak daha sonra tekrar etkinleştirilebilir- Kiracılar listesinde
isDisabled: trueolarak görünür
Bu, kalıcı silme işleminden genellikle daha güvenli bir seçenektir.