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

  1. Kiracı API Anahtarlarını Kullanın: Çoğu işlem için, kiracı kapsamlı anahtarlar daha güvenlidir
  2. Kapasiteyi Kontrol Edin: Toplu kullanıcı oluşturma öncesinde kiracı limitlerini doğrulayın
  3. Kaldırma vs Silme: Kiracıdan kaldırmak kullanıcıyı sistemde diğer kiracılar için tutar
  4. Oluşturmadan Önce Ara: Çoğaltmaları önlemek için kullanıcı mevcut mu diye kontrol edin