Projektbenutzer

Verwalten Sie den Benutzerzugang und die Berechtigungen für Projekte. Fügen Sie Benutzer zu Projekten hinzu, aktualisieren Sie deren Berechtigungsstufen und entfernen Sie bei Bedarf den Zugriff.

Berechtigungsstufen

Stufe Beschreibung
Owner (isOwner: true) Volle Kontrolle – kann Projekteinstellungen ändern, Benutzer verwalten, Projekt löschen
Member (isOwner: false) Kann Projektinhalte ansehen und bearbeiten, kann keine Benutzer verwalten oder löschen

Projektbenutzer auflisten

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

Ruft alle Benutzer mit Zugriff auf das Projekt ab.

Pfadparameter

Parameter Typ Erforderlich Beschreibung
tenantId GUID Ja Die Mandanten-ID
projectId GUID Ja Die Projekt-ID

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

Benutzerberechtigungsfelder

Feld Typ Beschreibung
permissionId GUID Eindeutige ID des Berechtigungseintrags
userId GUID Benutzer-ID
email string E-Mail-Adresse des Benutzers
displayName string Anzeigename des Benutzers
isOwner boolean Ob der Benutzer Projekt-Owner ist
dateAssigned datetime Zeitpunkt der Vergabe des Zugriffs

Benutzer zum Projekt hinzufügen

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

Fügt einen Benutzer mit angegebenen Berechtigungen zum Projekt hinzu.

Pfadparameter

Parameter Typ Erforderlich Beschreibung
tenantId GUID Ja Die Mandanten-ID
projectId GUID Ja Die Projekt-ID
userId GUID Ja Der hinzuzufügende Benutzer

Request Body (Optional)

{
  "isOwner": false
}

Felder im Request

Feld Typ Standard Beschreibung
isOwner boolean false Owner-Berechtigungen vergeben

Antwort (201 Created)

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

Fehlermeldungen

Konflikt (409):

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

Nicht gefunden (404):

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

Benutzerberechtigung aktualisieren

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

Aktualisiert die Berechtigungsstufe eines Benutzers im Projekt.

Pfadparameter

Parameter Typ Erforderlich Beschreibung
tenantId GUID Ja Die Mandanten-ID
projectId GUID Ja Die Projekt-ID
userId GUID Ja Der zu aktualisierende Benutzer

Request Body

{
  "isOwner": true
}

Antwort (200 OK)

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

Benutzer vom Projekt entfernen

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

Entfernt den Zugriff eines Benutzers auf das Projekt.

Pfadparameter

Parameter Typ Erforderlich Beschreibung
tenantId GUID Ja Die Mandanten-ID
projectId GUID Ja Die Projekt-ID
userId GUID Ja Der zu entfernende Benutzer

Antwort (200 OK)

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

Fehlermeldungen

Nicht gefunden (404):

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

Implementierungsbeispiele

cURL

# Projektbenutzer auflisten
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"

# Benutzer als Mitglied zum Projekt hinzufügen
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}'

# Benutzer als Owner hinzufügen
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}'

# Benutzer zum Owner befördern
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}'

# Benutzer aus Projekt entfernen
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):
        """Listet alle Benutzer mit Zugriff auf das Projekt."""
        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):
        """Fügt einen Benutzer dem Projekt hinzu."""
        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):
        """Aktualisiert die Berechtigungsstufe eines Benutzers."""
        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):
        """Entfernt einen Benutzer vom Projekt."""
        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()

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

# Benutzer auflisten
result = manager.list_users(project_id)
print(f"Projekt hat {result['totalCount']} Benutzer:")

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

# Neuen Benutzer als Mitglied hinzufügen
new_user_id = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
manager.add_user(project_id, new_user_id, is_owner=False)
print(f"Benutzer {new_user_id} als Mitglied hinzugefügt")

# Benutzer zum Owner befördern
manager.update_permission(project_id, new_user_id, is_owner=True)
print(f"Benutzer {new_user_id} zum Owner befördert")

# Benutzer entfernen
manager.remove_user(project_id, new_user_id)
print(f"Benutzer {new_user_id} entfernt")

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

// Verwendung
const manager = new ProjectUserManager('your-auth-token');
const projectId = '87654321-4321-4321-4321-210987654321';

// Benutzer auflisten
const users = await manager.listUsers(projectId);
console.log(`Projekt hat ${users.totalCount} Benutzer`);

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

// Benutzer als Mitglied hinzufügen und dann zum Owner befördern
await manager.addUser(projectId, 'user-id-here', false);
await manager.updatePermission(projectId, 'user-id-here', true);

Beste Praktiken

  1. Owner begrenzen: Gewähren Sie Owner-Zugriff nur Benutzern, die das Projekt verwalten müssen
  2. Zugriff prüfen: Überprüfen Sie regelmäßig die Projektbenutzer und entfernen Sie unnötige Zugriffe
  3. Mitglieder für Analysten: Reguläre Analysten sollten Mitglieder sein, keine Owner
  4. Änderungen dokumentieren: Protokollieren Sie Berechtigungsänderungen zu Audit-Zwecken