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
homeTenantIdverplicht - Bij demotie van serviceaccount wordt
homeTenantIdautomatisch 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`);