Globale Gebruikersoperaties

Globale gebruikersendpoints bieden systeemwijde gebruikersbeheerfuncties. Deze endpoints vereisen een Global API Key en kunnen gebruikers over alle tenants heen benaderen.

Authenticatie

Alle endpoints op deze pagina vereisen een Global API Key. Tenant-specifieke API keys krijgen een 401 Unauthorized foutmelding.


Alle Gebruikers Lijst

GET /api/user

Retourneert een gepagineerde lijst van alle gebruikers over alle tenants heen.

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

Response (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
}

Velden in Gebruikersobject

Veld Type Beschrijving
userId GUID Unieke identificator voor de gebruiker
email string E-mailadres van de gebruiker (uniek)
displayName string Weergavenaam van de gebruiker
firstName string Voornaam van de gebruiker
lastName string Achternaam van de gebruiker
roleName string Rol van de gebruiker (Administrator, TenantAdmin, Analyst, etc.)
disabled boolean Of het gebruikersaccount is uitgeschakeld
isServiceAccount boolean Of dit een serviceaccount is
homeTenantId GUID Home tenant voor serviceaccounts
homeTenantName string Naam van de home tenant voor serviceaccounts
lastLogin datetime Laatste inlogtijdstip
tenantCount integer Aantal tenants waaraan gebruiker is toegewezen
tenantNames string Komma-gescheiden lijst van tenant-namen
dateCreated datetime Datum van aanmaak account

Foutantwoorden

Unauthorized (401):

{
  "error": "This endpoint requires a Global API key. Tenant-specific API keys cannot list all users.",
  "hint": "Use /api/tenant/{tenantId}/user to list users for a specific tenant, or create a Global API key at /admin/global-api-keys"
}

Gebruiker Aanmaken

POST /api/user

Maakt een nieuwe gebruiker aan in het systeem. Dit wijst de gebruiker NIET toe aan enige tenants.

Request Body

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

Velden in Verzoek

Veld Type Verplicht Beschrijving
email string Ja E-mail van de gebruiker (moet uniek zijn)
displayName string Ja Weergavenaam (2-100 karakters)
firstName string Nee Voornaam (max 50 karakters)
lastName string Nee Achternaam (max 50 karakters)
roleName string Ja Rolnaam (zie Roles & Permissions)

Response (201 Created)

{
  "userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
  "email": "john.smith@example.com",
  "displayName": "John Smith",
  "message": "User created successfully"
}

Foutantwoorden

Conflict (409):

{
  "error": "A user with email 'john.smith@example.com' already exists"
}

Gebruiker Ophalen op ID

GET /api/user/{userId}

Haalt gedetailleerde informatie op voor een specifieke gebruiker.

Path Parameters

Parameter Type Beschrijving
userId GUID De gebruikersidentificator

Response (200 OK)

Retourneert een volledig gebruikersobject met tenant-toewijzingen.

Foutantwoorden

Not Found (404):

{
  "error": "User not found with ID 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'",
  "userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890"
}

Gebruiker Bijwerken

PUT /api/user/{userId}

Werkt gebruikers eigenschappen bij. Alleen opgegeven velden worden bijgewerkt.

Path Parameters

Parameter Type Beschrijving
userId GUID De gebruikersidentificator

Request Body

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

Velden in Verzoek

Veld Type Verplicht Beschrijving
displayName string Nee Nieuwe weergavenaam
roleName string Nee Nieuwe rolnaam
disabled boolean Nee Account in-/uitschakelen
isServiceAccount boolean Nee Serviceaccount vlag
homeTenantId GUID Conditie Vereist bij aanmaak/aanpassing serviceaccount

Regels voor Serviceaccounts

  • Alleen Administrator en TenantAdmin rollen kunnen serviceaccounts zijn
  • Bij promotie naar serviceaccount is homeTenantId verplicht
  • Bij demotie van serviceaccount wordt homeTenantId automatisch verwijderd

Response (200 OK)

{
  "message": "User updated successfully"
}

Gebruiker Ophalen op E-mail

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

Haalt een gebruiker op aan de hand van het e-mailadres.

Path Parameters

Parameter Type Beschrijving
email string Het e-mailadres van de gebruiker (URL gecodeerd)

Response (200 OK)

Retourneert een volledig gebruikersobject.


Tenants van Gebruiker Ophalen

GET /api/user/{userId}/tenants

Haalt alle tenant-toewijzingen voor een gebruiker op.

Path Parameters

Parameter Type Beschrijving
userId GUID De gebruikersidentificator

Response (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"
    }
  ]
}

Implementatievoorbeelden

cURL

# Alle gebruikers lijst (Global API key vereist)
curl -X GET "https://your-mindzie-instance.com/api/user?page=1&pageSize=50" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Zoek gebruikers op naam
curl -X GET "https://your-mindzie-instance.com/api/user?search=john" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Filter op rol
curl -X GET "https://your-mindzie-instance.com/api/user?role=Analyst" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Nieuwe gebruiker aanmaken
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"
  }'

# Gebruiker ophalen op ID
curl -X GET "https://your-mindzie-instance.com/api/user/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Gebruiker ophalen op e-mail
curl -X GET "https://your-mindzie-instance.com/api/user/by-email/john.smith%40example.com" \
  -H "Authorization: Bearer YOUR_GLOBAL_API_KEY"

# Tenants van gebruiker ophalen
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):
        """Initialiseer met een GLOBAL API key (niet tenant-specifiek)."""
        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):
        """Lijst alle gebruikers over alle tenants."""
        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):
        """Maak een nieuwe gebruiker aan (niet toegewezen aan een tenant)."""
        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):
        """Haal gebruiker op ID."""
        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):
        """Haal gebruiker op e-mailadres."""
        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):
        """Werk gebruikers eigenschappen bij."""
        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):
        """Haal alle tenant-toewijzingen voor een gebruiker op."""
        url = f'{BASE_URL}/api/user/{user_id}/tenants'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

# Gebruik
manager = GlobalUserManager('your-global-api-key')

# Alle analysts opvragen
analysts = manager.list_users(role='Analyst')
print(f"Totaal aantal analysts: {analysts['totalCount']}")

# Nieuwe gebruiker aanmaken
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"Aangemaakte gebruiker: {new_user['userId']}")

# Tenant-toewijzingen van gebruiker ophalen
user_id = new_user['userId']
tenants = manager.get_user_tenants(user_id)
print(f"Gebruiker is toegewezen aan {len(tenants['tenants'])} tenants")

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

// Gebruik
const manager = new GlobalUserManager('your-global-api-key');

// Alle gebruikers lijst
const users = await manager.listUsers();
console.log(`Totaal aantal gebruikers: ${users.totalCount}`);

// Nieuwe gebruiker aanmaken en tenant-toewijzingen ophalen
const newUser = await manager.createUser(
  'new@example.com',
  'New User',
  'Analyst'
);
const tenants = await manager.getUserTenants(newUser.userId);
console.log(`Toegewezen aan ${tenants.tenants.length} tenants`);