Tenant Gebruiker Operaties

Tenant-gebonden gebruikersendpoints beheren gebruikers binnen een specifieke tenant. Deze endpoints kunnen worden benaderd met een Global API Key of een Tenant API Key.

Authenticatie

API Key Type Toegang
Global API Key Kan toegang krijgen tot elke tenant
Tenant API Key Kan alleen toegang krijgen tot de eigen tenant

Lijst Gebruikers voor Tenant

GET /api/tenant/{tenantId}/user

Haalt gebruikers op die aan een specifieke tenant zijn toegewezen.

Padparameters

Parameter Type Vereist Beschrijving
tenantId GUID Ja De tenant-identificatie

Query Parameters

Parameter Type Standaard Beschrijving
page integer 1 Paginanummer voor paginering
pageSize integer 50 Aantal items per pagina (max: 1000)
includeDisabled boolean false Inclusief uitgeschakelde gebruikers
role string null Filter op rolename
search string null Zoek op e-mail of weergavenaam

Antwoord (200 OK)

Zelfde structuur als de globale Lijst Alle Gebruikers, maar gefilterd op de opgegeven tenant.


Maak Gebruiker aan in Tenant

POST /api/tenant/{tenantId}/user

Maakt een nieuwe gebruiker aan EN wijst deze toe aan de tenant, of wijst een bestaande gebruiker toe aan de tenant.

Let op: Als een gebruiker met het opgegeven e-mailadres al bestaat, wordt deze toegewezen aan de tenant in plaats van een duplicaat te creëren.

Padparameters

Parameter Type Vereist Beschrijving
tenantId GUID Ja De tenant-identificatie

Request Body

{
  "email": "john.smith@example.com",
  "displayName": "John Smith",
  "firstName": "John",
  "lastName": "Smith",
  "roleName": "Analyst"
}

Request Velden

Veld Type Vereist Beschrijving
email string Ja E-mailadres van de gebruiker
displayName string Ja Weergavenaam (2-100 tekens)
firstName string Nee Voornaam (max 50 tekens)
lastName string Nee Achternaam (max 50 tekens)
roleName string Ja Rolnaam (zie Roles & Permissions)

Capaciteitscontrole

De operatie valideert tenant capaciteitslimieten:

  • MaxUsers limiet wordt gecontroleerd voor alle rollen
  • MaxAnalyst limiet wordt gecontroleerd voor Analyst-rollen

Antwoord (201 Created)

{
  "userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "email": "john.smith@example.com",
  "displayName": "John Smith",
  "message": "Gebruiker succesvol aangemaakt en toegewezen aan tenant"
}

Foutantwoorden

Conflict (409):

{
  "error": "Gebruiker is al toegewezen aan deze tenant"
}

Capaciteit Overschreden (400):

{
  "error": "Kan gebruiker niet toevoegen: tenant heeft zijn maximale gebruikerslimiet bereikt (100)",
  "hint": "Verhoog de gebruikers- of analystlimiet van de tenant om meer gebruikers toe te voegen"
}

Haal Gebruiker op in Tenant

GET /api/tenant/{tenantId}/user/{userId}

Haalt een specifieke gebruiker op binnen de tenant context.

Padparameters

Parameter Type Vereist Beschrijving
tenantId GUID Ja De tenant-identificatie
userId GUID Ja De gebruiker identificatie

Antwoord (200 OK)

Retourneert het gebruikersobject als deze is toegewezen aan de tenant.


Haal Gebruiker op via E-mail in Tenant

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

Haalt een gebruiker op via e-mail binnen de tenant context.

Padparameters

Parameter Type Vereist Beschrijving
tenantId GUID Ja De tenant-identificatie
email string Ja Het e-mailadres van de gebruiker (URL gecodeerd)

Antwoord (200 OK)

Retourneert het gebruikersobject als deze is toegewezen aan de tenant.


Wijs Bestaande Gebruiker Toe aan Tenant

POST /api/tenant/{tenantId}/user/{userId}

Wijst een bestaande gebruiker toe aan een tenant.

Padparameters

Parameter Type Vereist Beschrijving
tenantId GUID Ja De tenant-identificatie
userId GUID Ja De gebruiker identificatie

Request Body (Optioneel)

{
  "roleName": "Analyst"
}

Antwoord (200 OK)

{
  "message": "Gebruiker succesvol toegewezen aan tenant"
}

Update Gebruiker in Tenant

PUT /api/tenant/{tenantId}/user/{userId}

Wijzigt de eigenschappen van een gebruiker binnen de tenant context.

Padparameters

Parameter Type Vereist Beschrijving
tenantId GUID Ja De tenant-identificatie
userId GUID Ja De gebruiker identificatie

Request Body

{
  "displayName": "Bijgewerkte Naam",
  "roleName": "TenantAdmin"
}

Antwoord (200 OK)

{
  "message": "Gebruiker succesvol bijgewerkt"
}

Verwijder Gebruiker uit Tenant

DELETE /api/tenant/{tenantId}/user/{userId}

Verwijdert de toewijzing van een gebruiker aan een tenant. Dit verwijdert de gebruiker NIET uit het systeem.

Padparameters

Parameter Type Vereist Beschrijving
tenantId GUID Ja De tenant-identificatie
userId GUID Ja De gebruiker identificatie

Antwoord (200 OK)

{
  "message": "Gebruiker succesvol verwijderd uit tenant"
}

Foutantwoorden

Niet Gevonden (404):

{
  "error": "Gebruiker is niet toegewezen aan deze tenant"
}

Implementatie Voorbeelden

cURL

# Lijst gebruikers voor een tenant (Tenant API key werkt)
curl -X GET "https://your-mindzie-instance.com/api/tenant/12345678-1234-1234-1234-123456789012/user" \
  -H "Authorization: Bearer YOUR_TENANT_API_KEY"

# Zoek gebruikers in tenant
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"

# Maak gebruiker aan in tenant (maakt gebruiker AAN en wijst toe)
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": "Nieuwe Gebruiker",
    "roleName": "Analyst"
  }'

# Wijs bestaande gebruiker toe aan tenant
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"}'

# Verwijder gebruiker uit tenant
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):
        """
        Initialiseer met een API key en tenant ID.
        Werkt met zowel Global als Tenant API keys.
        """
        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):
        """Lijst gebruikers die aan deze tenant zijn toegewezen."""
        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):
        """Maak een gebruiker aan en wijs toe aan tenant (of wijs bestaande gebruiker toe)."""
        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):
        """Wijs een bestaande gebruiker toe aan deze tenant."""
        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):
        """Verwijder een gebruiker uit deze tenant (verwijdert de gebruiker niet)."""
        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):
        """Haalt een specifieke gebruiker op in deze tenant."""
        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()

# Gebruik met Tenant API key
tenant_id = '12345678-1234-1234-1234-123456789012'
manager = TenantUserManager('your-tenant-api-key', tenant_id)

# Lijst alle analisten in tenant
analysts = manager.list_users(role='Analyst')
print(f"Tenant heeft {analysts['totalCount']} analisten")

for user in analysts['users']:
    print(f"  - {user['displayName']} ({user['email']})")

# Voeg een nieuwe analist toe
new_user = manager.create_user(
    email='new.analyst@example.com',
    display_name='Nieuwe Analist',
    role_name='Analyst'
)
print(f"Toegevoegde gebruiker: {new_user['userId']}")

# Verwijder gebruiker uit tenant (gebruiker blijft in systeem)
manager.remove_user(new_user['userId'])
print("Gebruiker verwijderd uit tenant")

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(`Mislukt: ${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(`Mislukt: ${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(`Mislukt: ${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(`Mislukt: ${response.status}`);
    return await response.json();
  }
}

// Gebruik
const tenantId = '12345678-1234-1234-1234-123456789012';
const manager = new TenantUserManager('your-tenant-api-key', tenantId);

// Lijst gebruikers
const users = await manager.listUsers();
console.log(`Tenant heeft ${users.totalCount} gebruikers`);

// Voeg nieuwe gebruiker toe
const newUser = await manager.createUser(
  'new@example.com',
  'Nieuwe Gebruiker',
  'Analyst'
);
console.log(`Toegevoegd: ${newUser.userId}`);

Beste Praktijken

  1. Gebruik Tenant API Keys: Tenant-gebonden keys zijn voor de meeste operaties veiliger
  2. Controleer Capaciteit: Verifieer tenantlimieten voor bulk gebruikersaanmaak
  3. Verwijderen vs Verwijderen: Verwijderen uit tenant houdt gebruiker in systeem voor andere tenants
  4. Zoek vóór aanmaak: Controleer of gebruiker bestaat voordat je nieuwe aanmaakt om duplicaten te vermijden