Projectgebruikers

Beheer gebruikers toegang en permissies voor projecten. Voeg gebruikers toe aan projecten, werk hun permissieniveaus bij en verwijder toegang indien nodig.

Permissieniveaus

Niveau Beschrijving
Eigenaar (isOwner: true) Volledige controle - kan projectinstellingen wijzigen, gebruikers beheren, project verwijderen
Lid (isOwner: false) Kan projectinhoud bekijken en bewerken, kan geen gebruikers beheren of verwijderen

Projectgebruikers opvragen

GET /api/{tenantId}/project/{projectId}/users

Haal alle gebruikers op met toegang tot het project.

Path Parameters

Parameter Type Verplicht Beschrijving
tenantId GUID Ja De tenant identifier
projectId GUID Ja De project identifier

Response (200 OK)

{
  "users": [
    {
      "permissionId": "11111111-1111-1111-1111-111111111111",
      "userId": "a1b2c3d4-e5f6-7890-abcd-ef1234567890",
      "email": "john.smith@example.com",
      "displayName": "John Smith",
      "isOwner": true,
      "dateAssigned": "2024-01-15T10:30:00Z"
    },
    {
      "permissionId": "22222222-2222-2222-2222-222222222222",
      "userId": "b2c3d4e5-f6a7-8901-bcde-f23456789012",
      "email": "jane.doe@example.com",
      "displayName": "Jane Doe",
      "isOwner": false,
      "dateAssigned": "2024-01-20T14:00:00Z"
    }
  ],
  "totalCount": 2
}

Velden Gebruikerspermissie

Veld Type Beschrijving
permissionId GUID Unieke ID van de permissie
userId GUID Gebruikersidentifier
email string E-mailadres van de gebruiker
displayName string Weergavenaam van de gebruiker
isOwner boolean Of de gebruiker een eigenaar van het project is
dateAssigned datetime Wanneer toegang is toegekend

Gebruiker toevoegen aan project

POST /api/{tenantId}/project/{projectId}/users/{userId}

Voegt een gebruiker toe aan het project met opgegeven permissies.

Path Parameters

Parameter Type Verplicht Beschrijving
tenantId GUID Ja De tenant identifier
projectId GUID Ja De project identifier
userId GUID Ja De gebruiker die toegevoegd wordt

Request Body (Optioneel)

{
  "isOwner": false
}

Request Velden

Veld Type Standaard Beschrijving
isOwner boolean false Toekennen van eigenaar permissies

Response (201 Created)

{
  "message": "User added to project successfully"
}

Foutresponses

Conflict (409):

{
  "error": "User is already a member of this project"
}

Niet gevonden (404):

{
  "error": "User not found with ID '{userId}'"
}

Gebruikerspermissie bijwerken

PUT /api/{tenantId}/project/{projectId}/users/{userId}

Wijzigt het permissieniveau van een gebruiker binnen het project.

Path Parameters

Parameter Type Verplicht Beschrijving
tenantId GUID Ja De tenant identifier
projectId GUID Ja De project identifier
userId GUID Ja De gebruiker die wordt bijgewerkt

Request Body

{
  "isOwner": true
}

Response (200 OK)

{
  "message": "User permission updated successfully"
}

Gebruiker verwijderen uit project

DELETE /api/{tenantId}/project/{projectId}/users/{userId}

Verwijdert de toegang van een gebruiker tot het project.

Path Parameters

Parameter Type Verplicht Beschrijving
tenantId GUID Ja De tenant identifier
projectId GUID Ja De project identifier
userId GUID Ja De gebruiker die wordt verwijderd

Response (200 OK)

{
  "message": "User removed from project successfully"
}

Foutresponses

Niet gevonden (404):

{
  "error": "User is not a member of this project"
}

Implementatievoorbeelden

cURL

# Projectgebruikers ophalen
curl -X GET "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/users" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

# Gebruiker toevoegen aan project (als lid)
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"isOwner": false}'

# Gebruiker toevoegen als eigenaar
curl -X POST "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"isOwner": true}'

# Gebruiker promoveren tot eigenaar
curl -X PUT "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"isOwner": true}'

# Gebruiker verwijderen uit project
curl -X DELETE "https://your-mindzie-instance.com/api/12345678-1234-1234-1234-123456789012/project/87654321-4321-4321-4321-210987654321/users/a1b2c3d4-e5f6-7890-abcd-ef1234567890" \
  -H "Authorization: Bearer YOUR_ACCESS_TOKEN"

Python

import requests

TENANT_ID = '12345678-1234-1234-1234-123456789012'
BASE_URL = 'https://your-mindzie-instance.com'

class ProjectUserManager:
    def __init__(self, token):
        self.headers = {
            'Authorization': f'Bearer {token}',
            'Content-Type': 'application/json'
        }

    def list_users(self, project_id):
        """Alle gebruikers met toegang tot het project ophalen."""
        url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/users'
        response = requests.get(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def add_user(self, project_id, user_id, is_owner=False):
        """Gebruiker toevoegen aan het project."""
        url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/users/{user_id}'
        payload = {'isOwner': is_owner}
        response = requests.post(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def update_permission(self, project_id, user_id, is_owner):
        """Permissieniveau van gebruiker bijwerken."""
        url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/users/{user_id}'
        payload = {'isOwner': is_owner}
        response = requests.put(url, json=payload, headers=self.headers)
        response.raise_for_status()
        return response.json()

    def remove_user(self, project_id, user_id):
        """Gebruiker verwijderen uit project."""
        url = f'{BASE_URL}/api/{TENANT_ID}/project/{project_id}/users/{user_id}'
        response = requests.delete(url, headers=self.headers)
        response.raise_for_status()
        return response.json()

# Gebruik
manager = ProjectUserManager('your-auth-token')
project_id = '87654321-4321-4321-4321-210987654321'

# Huidige gebruikers ophalen
result = manager.list_users(project_id)
print(f"Project heeft {result['totalCount']} gebruikers:")

for user in result['users']:
    role = 'Eigenaar' if user['isOwner'] else 'Lid'
    print(f"  - {user['displayName']} ({user['email']}) - {role}")

# Nieuwe gebruiker toevoegen als lid
new_user_id = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
manager.add_user(project_id, new_user_id, is_owner=False)
print(f"Gebruiker {new_user_id} toegevoegd als lid")

# Gebruiker promoveren tot eigenaar
manager.update_permission(project_id, new_user_id, is_owner=True)
print(f"Gebruiker {new_user_id} gepromoveerd tot eigenaar")

# Gebruiker verwijderen
manager.remove_user(project_id, new_user_id)
print(f"Gebruiker {new_user_id} verwijderd")

JavaScript/Node.js

const TENANT_ID = '12345678-1234-1234-1234-123456789012';
const BASE_URL = 'https://your-mindzie-instance.com';

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

  async listUsers(projectId) {
    const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}/users`;
    const response = await fetch(url, { headers: this.headers });
    if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
    return await response.json();
  }

  async addUser(projectId, userId, isOwner = false) {
    const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}/users/${userId}`;
    const response = await fetch(url, {
      method: 'POST',
      headers: this.headers,
      body: JSON.stringify({ isOwner })
    });
    if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
    return await response.json();
  }

  async updatePermission(projectId, userId, isOwner) {
    const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}/users/${userId}`;
    const response = await fetch(url, {
      method: 'PUT',
      headers: this.headers,
      body: JSON.stringify({ isOwner })
    });
    if (!response.ok) throw new Error(`Mislukt: ${response.status}`);
    return await response.json();
  }

  async removeUser(projectId, userId) {
    const url = `${BASE_URL}/api/${TENANT_ID}/project/${projectId}/users/${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 manager = new ProjectUserManager('your-auth-token');
const projectId = '87654321-4321-4321-4321-210987654321';

// Gebruikers ophalen
const users = await manager.listUsers(projectId);
console.log(`Project heeft ${users.totalCount} gebruikers`);

users.users.forEach(user => {
  const role = user.isOwner ? 'Eigenaar' : 'Lid';
  console.log(`  - ${user.displayName} (${role})`);
});

// Gebruiker toevoegen als lid, daarna promoveren tot eigenaar
await manager.addUser(projectId, 'user-id-here', false);
await manager.updatePermission(projectId, 'user-id-here', true);

Best Practices

  1. Beperk eigenaren: Verleen alleen eigenaarstoegang aan gebruikers die het project moeten beheren
  2. Controleer toegang: Beoordeel regelmatig projectgebruikers en verwijder onnodige toegang
  3. Gebruik leden voor analisten: Gewone analisten moeten leden zijn, geen eigenaren
  4. Documenteer wijzigingen: Log permissiewijzigingen voor auditdoeleinden