Global Kullanıcı İşlemleri

Global kullanıcı uç noktaları, sistem genelinde kullanıcı yönetimi yetenekleri sağlar. Bu uç noktalar Global API Anahtarı gerektirir ve tüm kiracılardaki kullanıcılara erişim sağlar.

Kimlik Doğrulama

Bu sayfadaki tüm uç noktalar Global API Anahtarı gerektirir. Kiracıya özel API anahtarları 401 Yetkisiz hatası alacaktır.


Tüm Kullanıcıları Listele

GET /api/user

Tüm kiracılardaki kullanıcıların sayfalanmış listesini döner.

Sorgu Parametreleri

Parametre Tür Varsayılan Açıklama
page integer 1 Sayfalama için sayfa numarası
pageSize integer 50 Sayfa başına öğe sayısı (maks: 1000)
includeDisabled boolean false Devre dışı bırakılmış kullanıcılar dahil edilsin mi
role string null Rol adına göre filtrele
search string null E-posta veya görüntüleme adına göre arama

Yanıt (200 OK)

{
  "users": [
    {
      "userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "email": "john.smith@example.com",
      "displayName": "John Smith",
      "firstName": "John",
      "lastName": "Smith",
      "roleName": "Analyst",
      "disabled": false,
      "isServiceAccount": false,
      "homeTenantId": null,
      "homeTenantName": null,
      "lastLogin": "2024-01-15T10:30:00Z",
      "tenantCount": 2,
      "tenantNames": "acme-corp, globex-inc",
      "dateCreated": "2024-01-01T00:00:00Z"
    }
  ],
  "totalCount": 150,
  "page": 1,
  "pageSize": 50
}

Kullanıcı Nesnesi Alanları

Alan Tür Açıklama
userId GUID Kullanıcının benzersiz tanımlayıcısı
email string Kullanıcının e-posta adresi (benzersiz)
displayName string Kullanıcının görüntüleme adı
firstName string Kullanıcının adı
lastName string Kullanıcının soyadı
roleName string Kullanıcının rolü (Administrator, TenantAdmin, Analyst, vb.)
disabled boolean Kullanıcı hesabının devre dışı olup olmadığı
isServiceAccount boolean Bunun bir servis hesabı olup olmadığı
homeTenantId GUID Servis hesapları için ana kiracı
homeTenantName string Servis hesapları için ana kiracı adı
lastLogin datetime Son giriş zaman damgası
tenantCount integer Kullanıcının atandığı kiracı sayısı
tenantNames string Virgülle ayrılmış kiracı adları listesi
dateCreated datetime Hesap oluşturulma tarihi

Hata Yanıtları

Yetkisiz (401):

{
  "error": "Bu uç nokta bir Global API anahtarı gerektirir. Kiracıya özel API anahtarları tüm kullanıcıları listeleyemez.",
  "hint": "/api/tenant/{tenantId}/user kullanarak belirli bir kiracının kullanıcılarını listeleyin veya /admin/global-api-keys adresinden Global API anahtarı oluşturun"
}

Kullanıcı Oluştur

POST /api/user

Sistemde yeni bir kullanıcı oluşturur. Bu işlem kullanıcıyı herhangi bir kiracıya atamaz.

İ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-postası (benzersiz olmalı)
displayName string Evet Görüntüleme adı (2-100 karakter)
firstName string Hayır Adı (maksimum 50 karakter)
lastName string Hayır Soyadı (maksimum 50 karakter)
roleName string Evet Rol adı (Roller ve İzinler sayfasına bakınız)

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"
}

Hata Yanıtları

Çakışma (409):

{
  "error": "'john.smith@example.com' e-posta adresine sahip bir kullanıcı zaten mevcut"
}

ID ile Kullanıcıyı Getir

GET /api/user/{userId}

Belirli bir kullanıcının detaylı bilgilerini getirir.

Yol Parametreleri

Parametre Tür Açıklama
userId GUID Kullanıcı kimliği

Yanıt (200 OK)

Kiracı atamalarıyla birlikte tam kullanıcı nesnesi döner.

Hata Yanıtları

Bulunamadı (404):

{
  "error": "'a1b2c3d4-e5f6-7890-abcd-ef1234567890' ID'li kullanıcı bulunamadı",
  "userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Kullanıcı Güncelle

PUT /api/user/{userId}

Kullanıcı özelliklerini günceller. Sadece sağlanan alanlar güncellenecektir.

Yol Parametreleri

Parametre Tür Açıklama
userId GUID Kullanıcı kimliği

İstek Gövdesi

{
  "displayName": "Jane Smith",
  "roleName": "TenantAdmin",
  "disabled": false,
  "isServiceAccount": true,
  "homeTenantId": "12345678-1234-1234-1234-123456789012"
}

İstek Alanları

Alan Tür Zorunlu Açıklama
displayName string Hayır Yeni görüntüleme adı
roleName string Hayır Yeni rol adı
disabled boolean Hayır Hesabı etkinleştir/devre dışı bırak
isServiceAccount boolean Hayır Servis hesabı işaretçisi
homeTenantId GUID Koşullu Servis hesabı yapılırken zorunlu

Servis Hesabı Kuralları

  • Sadece Administrator ve TenantAdmin rolleri servis hesabı olabilir
  • Servis hesabı yapılırken homeTenantId zorunludur
  • Servis hesabı kaldırılırken homeTenantId otomatik olarak temizlenir

Yanıt (200 OK)

{
  "message": "Kullanıcı başarıyla güncellendi"
}

E-posta ile Kullanıcıyı Getir

GET /api/user/by-email/{email}

Email adresine göre kullanıcıyı getirir.

Yol Parametreleri

Parametre Tür Açıklama
email string Kullanıcının e-posta adresi (URL kodlu)

Yanıt (200 OK)

Tam kullanıcı nesnesi döner.


Kullanıcının Kiracılarını Getir

GET /api/user/{userId}/tenants

Kullanıcının atandığı tüm kiracıları getirir.

Yol Parametreleri

Parametre Tür Açıklama
userId GUID Kullanıcı kimliği

Yanıt (200 OK)

{
  "userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "email": "john.smith@example.com",
  "displayName": "John Smith",
  "tenants": [
    {
      "tenantId": "12345678-1234-1234-1234-123456789012",
      "tenantName": "acme-corp",
      "displayName": "Acme Corporation",
      "dateAssigned": "2024-01-15T10:30:00Z"
    }
  ]
}

Uygulama Örnekleri

cURL

# Tüm kullanıcıları listele (Global API anahtarı gerekir)
curl -X GET "https://your-mindzie-instance.com/api/user?page=1&pageSize=50" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# İsimle kullanıcı arama
curl -X GET "https://your-mindzie-instance.com/api/user?search=john" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Role göre filtrele
curl -X GET "https://your-mindzie-instance.com/api/user?role=Analyst" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Yeni kullanıcı oluştur
curl -X POST "https://your-mindzie-instance.com/api/user" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "email": "john.smith@example.com",
    "displayName": "John Smith",
    "roleName": "Analyst"
  }'

# ID ile kullanıcıyı getir
curl -X GET "https://your-mindzie-instance.com/api/user/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# E-posta ile kullanıcıyı getir
curl -X GET "https://your-mindzie-instance.com/api/user/by-email/john.smith%40example.com" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Kullanıcının kiracılarını getir
curl -X GET "https://your-mindzie-instance.com/api/user/a1b2c3d4-e5f6-7890-abcd-ef1234567890/tenants" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

Python

import requests

BASE_URL = 'https://your-mindzie-instance.com'

class GlobalUserManager:
    def __init__(self, global_api_key):
        """GLOBAL API anahtarı ile başlatılır (kiracıya özel değil)."""
        self.headers = {
            'Authorization': f'Bearer {global_api_key}',
            'Content-Type': 'application/json'
        }

    def list_users(self, page=1, page_size=50, include_disabled=False,
                   role=None, search=None):
        """Tüm kiracılardaki kullanıcıları listele."""
        url = f'{BASE_URL}/api/user'
        params = {
            'page': page,
            'pageSize': page_size,
            'includeDisabled': include_disabled
        }
        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):
        """Yeni kullanıcı oluştur (herhangi bir kiracıya atanmamış)."""
        url = f'{BASE_URL}/api/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 get_user(self, user_id):
        """ID ile kullanıcıyı getir."""
        url = f'{BASE_URL}/api/user/{user_id}'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def get_user_by_email(self, email):
        """E-posta adresi ile kullanıcıyı getir."""
        from urllib.parse import quote
        url = f'{BASE_URL}/api/user/by-email/{quote(email, safe="")}'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def update_user(self, user_id, display_name=None, role_name=None,
                    disabled=None, is_service_account=None, home_tenant_id=None):
        """Kullanıcı özelliklerini güncelle."""
        url = f'{BASE_URL}/api/user/{user_id}'
        payload = {}
        if display_name is not None:
            payload['displayName'] = display_name
        if role_name is not None:
            payload['roleName'] = role_name
        if disabled is not None:
            payload['disabled'] = disabled
        if is_service_account is not None:
            payload['isServiceAccount'] = is_service_account
        if home_tenant_id is not None:
            payload['homeTenantId'] = home_tenant_id

        response = requests.put(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def get_user_tenants(self, user_id):
        """Kullanıcının tüm kiracı atamalarını getir."""
        url = f'{BASE_URL}/api/user/{user_id}/tenants'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

# Kullanım
manager = GlobalUserManager('your-global-api-key')

# Tüm analistleri listele
analysts = manager.list_users(role='Analyst')
print(f"Toplam analist: {analysts['totalCount']}")

# Yeni kullanıcı oluştur
new_user = manager.create_user(
    email='new.analyst@example.com',
    display_name='New Analyst',
    role_name='Analyst',
    first_name='New',
    last_name='Analyst'
)
print(f"Oluşturulan kullanıcı: {new_user['userId']}")

# Kullanıcının kiracı atamalarını al
user_id = new_user['userId']
tenants = manager.get_user_tenants(user_id)
print(f"Kullanıcı {len(tenants['tenants'])} kiracıya atanmış")

JavaScript/Node.js

const BASE_URL = 'https://your-mindzie-instance.com';

class GlobalUserManager {
  constructor(globalApiKey) {
    this.headers = {
      'Authorization': `Bearer ${globalApiKey}`,
      'Content-Type': 'application/json'
    };
  }

  async listUsers(options = {}) {
    const params = new URLSearchParams({
      page: options.page || 1,
      pageSize: options.pageSize || 50,
      includeDisabled: options.includeDisabled || false
    });
    if (options.role) params.append('role', options.role);
    if (options.search) params.append('search', options.search);

    const url = `${BASE_URL}/api/user?${params}`;
    const response = await fetch(url, { headers: this.headers });
    if (!response.ok) throw new Error(`Hata: ${response.status}`);
    return await response.json();
  }

  async createUser(email, displayName, roleName) {
    const url = `${BASE_URL}/api/user`;
    const response = await fetch(url, {
      method: 'POST',
      headers: this.headers,
      body: JSON.stringify({ email, displayName, roleName })
    });
    if (!response.ok) throw new Error(`Hata: ${response.status}`);
    return await response.json();
  }

  async getUser(userId) {
    const url = `${BASE_URL}/api/user/${userId}`;
    const response = await fetch(url, { headers: this.headers });
    if (!response.ok) throw new Error(`Hata: ${response.status}`);
    return await response.json();
  }

  async getUserTenants(userId) {
    const url = `${BASE_URL}/api/user/${userId}/tenants`;
    const response = await fetch(url, { headers: this.headers });
    if (!response.ok) throw new Error(`Hata: ${response.status}`);
    return await response.json();
  }
}

// Kullanım
const manager = new GlobalUserManager('your-global-api-key');

// Tüm kullanıcıları listele
const users = await manager.listUsers();
console.log(`Toplam kullanıcılar: ${users.totalCount}`);

// Yeni kullanıcı oluştur ve kiracı atamalarını kontrol et
const newUser = await manager.createUser(
  'new@example.com',
  'New User',
  'Analyst'
);
const tenants = await manager.getUserTenants(newUser.userId);
console.log(`${tenants.tenants.length} kiracıya atanmış`);