Kiracı Kullanıcı İşlemleri
Kiracı kapsamındaki kullanıcı uç noktaları, belirli bir kiracı içindeki kullanıcıları yönetir. Bu uç noktalara ya Global API Anahtarı ya da Kiracı API Anahtarı ile erişilebilir.
Kimlik Doğrulama
| API Anahtarı Türü | Erişim |
|---|---|
| Global API Anahtarı | Herhangi bir kiracıya erişebilir |
| Kiracı API Anahtarı | Sadece kendi kiracısına erişebilir |
Kiracı İçin Kullanıcıları Listele
GET /api/tenant/{tenantId}/user
Belirli bir kiracıya atanmış kullanıcıları getirir.
Yol Parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Kiracı tanımlayıcısı |
Sorgu Parametreleri
| Parametre | Tür | Varsayılan | Açıklama |
|---|---|---|---|
page |
tam sayı | 1 | Sayfalama için sayfa numarası |
pageSize |
tam sayı | 50 | Sayfa başına öğe sayısı (maks: 1000) |
includeDisabled |
boolean | false | Devre dışı bırakılmış kullanıcıları dahil et |
role |
string | null | Rol adına göre filtreleme |
search |
string | null | E-posta veya görüntüleme adına göre arama |
Yanıt (200 OK)
Global Tüm Kullanıcıları Listele ile aynı yapıda, ancak belirtilen kiracıya filtrelenmiş.
Kiracıya Kullanıcı Oluştur
POST /api/tenant/{tenantId}/user
Yeni bir kullanıcı oluşturur VE onları kiracıya atar, ya da mevcut bir kullanıcıyı kiracıya atar.
Not: Belirtilen e-posta ile kullanıcı zaten varsa, yeni bir kopya oluşturmak yerine o kullanıcı kiracıya atanır.
Yol Parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Kiracı tanımlayıcısı |
İstek Gövdesi
{
"email": "john.smith@example.com",
"displayName": "John Smith",
"firstName": "John",
"lastName": "Smith",
"roleName": "Analyst"
}
İstek Alanları
| Alan | Tür | Zorunlu | Açıklama |
|---|---|---|---|
email |
string | Evet | Kullanıcının e-posta adresi |
displayName |
string | Evet | Görüntüleme adı (2-100 karakter) |
firstName |
string | Hayır | İsim (maksimum 50 karakter) |
lastName |
string | Hayır | Soyisim (maksimum 50 karakter) |
roleName |
string | Evet | Rol adı (Roller & İzinler bakınız) |
Kapasite Doğrulaması
İşlem kiracı kapasite limitlerini doğrular:
- MaxUsers limiti tüm roller için kontrol edilir
- MaxAnalyst limiti Analyst rolleri için kontrol edilir
Yanıt (201 Created)
{
"userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
"email": "john.smith@example.com",
"displayName": "John Smith",
"message": "Kullanıcı başarıyla oluşturuldu ve kiracıya atandı"
}
Hata Yanıtları
Çakışma (409):
{
"error": "Kullanıcı zaten bu kiracıya atanmış"
}
Kapasite Aşıldı (400):
{
"error": "Kullanıcı eklenemiyor: kiracı maksimum kullanıcı limitine ulaştı (100)",
"hint": "Daha fazla kullanıcı eklemek için kiracının kullanıcı veya analist limitini artırın"
}
Kiracıdaki Kullanıcıyı Getir
GET /api/tenant/{tenantId}/user/{userId}
Kiracı bağlamında belirli bir kullanıcıyı getirir.
Yol Parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Kiracı tanımlayıcısı |
userId |
GUID | Evet | Kullanıcı tanımlayıcısı |
Yanıt (200 OK)
Kullanıcı kiracıya atanmışsa kullanıcı nesnesini döner.
Kiracıda E-posta ile Kullanıcıyı Getir
GET /api/tenant/{tenantId}/user/by-email/{email}
Kiracı bağlamında e-posta ile kullanıcıyı getirir.
Yol Parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Kiracı tanımlayıcısı |
email |
string | Evet | Kullanıcının e-posta adresi (URL kodlu) |
Yanıt (200 OK)
Kullanıcı kiracıya atanmışsa kullanıcı nesnesini döner.
Mevcut Kullanıcıyı Kiracıya Ata
POST /api/tenant/{tenantId}/user/{userId}
Mevcut bir kullanıcıyı kiracıya atar.
Yol Parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Kiracı tanımlayıcısı |
userId |
GUID | Evet | Kullanıcı tanımlayıcısı |
İstek Gövdesi (İsteğe bağlı)
{
"roleName": "Analyst"
}
Yanıt (200 OK)
{
"message": "Kullanıcı başarıyla kiracıya atandı"
}
Kiracıdaki Kullanıcıyı Güncelle
PUT /api/tenant/{tenantId}/user/{userId}
Kiracı bağlamında bir kullanıcının özelliklerini günceller.
Yol Parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Kiracı tanımlayıcısı |
userId |
GUID | Evet | Kullanıcı tanımlayıcısı |
İstek Gövdesi
{
"displayName": "Güncellenmiş İsim",
"roleName": "TenantAdmin"
}
Yanıt (200 OK)
{
"message": "Kullanıcı başarıyla güncellendi"
}
Kiracıdan Kullanıcıyı Kaldır
DELETE /api/tenant/{tenantId}/user/{userId}
Bir kullanıcının kiracı atamasını kaldırır. Bu işlem kullanıcıyı sistemden silmez.
Yol Parametreleri
| Parametre | Tür | Zorunlu | Açıklama |
|---|---|---|---|
tenantId |
GUID | Evet | Kiracı tanımlayıcısı |
userId |
GUID | Evet | Kullanıcı tanımlayıcısı |
Yanıt (200 OK)
{
"message": "Kullanıcı başarıyla kiracıdan kaldırıldı"
}
Hata Yanıtları
Bulunamadı (404):
{
"error": "Kullanıcı bu kiracıya atanmış değil"
}
Uygulama Örnekleri
cURL
# Kiracı için kullanıcıları listele (Kiracı API anahtarı çalışır)
curl -X GET "https://your-mindzie-instance.com/api/tenant/12345678-1234-1234-1234-123456789012/user" \
-H "Authorization: Bearer YOUR_TENANT_API_KEY"
# Kiracıda kullanıcı ara
curl -X GET "https://your-mindzie-instance.com/api/tenant/12345678-1234-1234-1234-123456789012/user?search=john" \
-H "Authorization: Bearer YOUR_TENANT_API_KEY"
# Kiracıya kullanıcı oluştur (kullanıcıyı oluşturur VE atar)
curl -X POST "https://your-mindzie-instance.com/api/tenant/12345678-1234-1234-1234-123456789012/user" \
-H "Authorization: Bearer YOUR_TENANT_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"email": "new.user@example.com",
"displayName": "Yeni Kullanıcı",
"roleName": "Analyst"
}'
# Mevcut kullanıcıyı kiracıya ata
curl -X POST "https://your-mindzie-instance.com/api/tenant/12345678-1234-1234-1234-123456789012/user/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-H "Authorization: Bearer YOUR_TENANT_API_KEY" \
-H "Content-Type: application/json" \
-d '{"roleName": "Analyst"}'
# Kiracıdan kullanıcıyı kaldır
curl -X DELETE "https://your-mindzie-instance.com/api/tenant/12345678-1234-1234-1234-123456789012/user/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
-H "Authorization: Bearer YOUR_TENANT_API_KEY"
Python
import requests
BASE_URL = 'https://your-mindzie-instance.com'
class TenantUserManager:
def __init__(self, api_key, tenant_id):
"""
Bir API anahtarı ve kiracı kimliği ile başlatılır.
Global ve Kiracı API anahtarları ile çalışır.
"""
self.headers = {
'Authorization': f'Bearer {api_key}',
'Content-Type': 'application/json'
}
self.tenant_id = tenant_id
def list_users(self, page=1, page_size=50, role=None, search=None):
"""Bu kiracıya atanmış kullanıcıları listele."""
url = f'{BASE_URL}/api/tenant/{self.tenant_id}/user'
params = {'page': page, 'pageSize': page_size}
if role:
params['role'] = role
if search:
params['search'] = search
response = requests.get(url, headers=self.headers, params=params)
response.raise_for_status()
return response.json()
def create_user(self, email, display_name, role_name,
first_name=None, last_name=None):
"""Kullanıcı oluştur ve kiracıya ata (veya mevcut kullanıcıyı ata)."""
url = f'{BASE_URL}/api/tenant/{self.tenant_id}/user'
payload = {
'email': email,
'displayName': display_name,
'roleName': role_name
}
if first_name:
payload['firstName'] = first_name
if last_name:
payload['lastName'] = last_name
response = requests.post(url, json=payload, headers=self.headers)
response.raise_for_status()
return response.json()
def assign_user(self, user_id, role_name=None):
"""Mevcut bir kullanıcıyı bu kiracıya ata."""
url = f'{BASE_URL}/api/tenant/{self.tenant_id}/user/{user_id}'
payload = {}
if role_name:
payload['roleName'] = role_name
response = requests.post(url, json=payload, headers=self.headers)
response.raise_for_status()
return response.json()
def remove_user(self, user_id):
"""Bir kullanıcıyı bu kiracıdan kaldır (kullanıcıyı silmez)."""
url = f'{BASE_URL}/api/tenant/{self.tenant_id}/user/{user_id}'
response = requests.delete(url, headers=self.headers)
response.raise_for_status()
return response.json()
def get_user(self, user_id):
"""Bu kiracıdaki belirli bir kullanıcıyı al."""
url = f'{BASE_URL}/api/tenant/{self.tenant_id}/user/{user_id}'
response = requests.get(url, headers=self.headers)
response.raise_for_status()
return response.json()
# Kiracı API anahtarı ile kullanım
tenant_id = '12345678-1234-1234-1234-123456789012'
manager = TenantUserManager('your-tenant-api-key', tenant_id)
# Kiracıdaki tüm analistleri listele
analysts = manager.list_users(role='Analyst')
print(f"Kiracıda {analysts['totalCount']} analist var")
for user in analysts['users']:
print(f" - {user['displayName']} ({user['email']})")
# Yeni bir analist ekle
new_user = manager.create_user(
email='new.analyst@example.com',
display_name='Yeni Analist',
role_name='Analyst'
)
print(f"Kullanıcı eklendi: {new_user['userId']}")
# Kullanıcıyı kiracıdan kaldır (kullanıcı sistemde kalır)
manager.remove_user(new_user['userId'])
print("Kullanıcı kiracıdan kaldırıldı")
JavaScript/Node.js
const BASE_URL = 'https://your-mindzie-instance.com';
class TenantUserManager {
constructor(apiKey, tenantId) {
this.headers = {
'Authorization': `Bearer ${apiKey}`,
'Content-Type': 'application/json'
};
this.tenantId = tenantId;
}
async listUsers(options = {}) {
const params = new URLSearchParams({
page: options.page || 1,
pageSize: options.pageSize || 50
});
if (options.role) params.append('role', options.role);
if (options.search) params.append('search', options.search);
const url = `${BASE_URL}/api/tenant/${this.tenantId}/user?${params}`;
const response = await fetch(url, { headers: this.headers });
if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
return await response.json();
}
async createUser(email, displayName, roleName) {
const url = `${BASE_URL}/api/tenant/${this.tenantId}/user`;
const response = await fetch(url, {
method: 'POST',
headers: this.headers,
body: JSON.stringify({ email, displayName, roleName })
});
if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
return await response.json();
}
async assignUser(userId, roleName = null) {
const url = `${BASE_URL}/api/tenant/${this.tenantId}/user/${userId}`;
const body = roleName ? { roleName } : {};
const response = await fetch(url, {
method: 'POST',
headers: this.headers,
body: JSON.stringify(body)
});
if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
return await response.json();
}
async removeUser(userId) {
const url = `${BASE_URL}/api/tenant/${this.tenantId}/user/${userId}`;
const response = await fetch(url, {
method: 'DELETE',
headers: this.headers
});
if (!response.ok) throw new Error(`Başarısız: ${response.status}`);
return await response.json();
}
}
// Kullanım
const tenantId = '12345678-1234-1234-1234-123456789012';
const manager = new TenantUserManager('your-tenant-api-key', tenantId);
// Kullanıcıları listele
const users = await manager.listUsers();
console.log(`Kiracıda ${users.totalCount} kullanıcı var`);
// Yeni kullanıcı ekle
const newUser = await manager.createUser(
'new@example.com',
'Yeni Kullanıcı',
'Analyst'
);
console.log(`Eklendi: ${newUser.userId}`);
En İyi Uygulamalar
- Kiracı API Anahtarlarını Kullanın: Çoğu işlem için, kiracı kapsamlı anahtarlar daha güvenlidir
- Kapasiteyi Kontrol Edin: Toplu kullanıcı oluşturma öncesinde kiracı limitlerini doğrulayın
- Kaldırma vs Silme: Kiracıdan kaldırmak kullanıcıyı sistemde diğer kiracılar için tutar
- Oluşturmadan Önce Ara: Çoğaltmaları önlemek için kullanıcı mevcut mu diye kontrol edin