Utilisateurs du Projet

Gérez l'accès et les permissions des utilisateurs pour les projets. Ajoutez des utilisateurs aux projets, mettez à jour leurs niveaux de permission et supprimez l'accès si nécessaire.

Niveaux de Permission

Niveau Description
Propriétaire (isOwner: true) Contrôle total - peut modifier les paramètres du projet, gérer les utilisateurs, supprimer le projet
Membre (isOwner: false) Peut consulter et travailler avec le contenu du projet, ne peut pas gérer les utilisateurs ni supprimer

Lister les Utilisateurs du Projet

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

Récupère tous les utilisateurs ayant accès au projet.

Paramètres du Chemin

Paramètre Type Obligatoire Description
tenantId GUID Oui L'identifiant du locataire
projectId GUID Oui L'identifiant du projet

Réponse (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
}

Champs des Permissions Utilisateur

Champ Type Description
permissionId GUID Identifiant unique de l'enregistrement de permission
userId GUID Identifiant de l'utilisateur
email string Adresse email de l'utilisateur
displayName string Nom d'affichage de l'utilisateur
isOwner boolean Si l'utilisateur est propriétaire du projet
dateAssigned datetime Date à laquelle l'accès a été accordé

Ajouter un Utilisateur au Projet

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

Ajoute un utilisateur au projet avec les permissions spécifiées.

Paramètres du Chemin

Paramètre Type Obligatoire Description
tenantId GUID Oui L'identifiant du locataire
projectId GUID Oui L'identifiant du projet
userId GUID Oui L'utilisateur à ajouter

Corps de la Requête (Optionnel)

{
  "isOwner": false
}

Champs de la Requête

Champ Type Par défaut Description
isOwner boolean false Accorder les permissions de propriétaire

Réponse (201 Created)

{
  "message": "Utilisateur ajouté au projet avec succès"
}

Réponses d'Erreur

Conflit (409):

{
  "error": "L'utilisateur est déjà membre de ce projet"
}

Introuvable (404):

{
  "error": "Utilisateur non trouvé avec l'ID '{userId}'"
}

Mettre à Jour la Permission d'un Utilisateur

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

Met à jour le niveau de permission d'un utilisateur sur le projet.

Paramètres du Chemin

Paramètre Type Obligatoire Description
tenantId GUID Oui L'identifiant du locataire
projectId GUID Oui L'identifiant du projet
userId GUID Oui L'utilisateur à mettre à jour

Corps de la Requête

{
  "isOwner": true
}

Réponse (200 OK)

{
  "message": "Permission de l'utilisateur mise à jour avec succès"
}

Retirer un Utilisateur du Projet

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

Supprime l'accès d'un utilisateur au projet.

Paramètres du Chemin

Paramètre Type Obligatoire Description
tenantId GUID Oui L'identifiant du locataire
projectId GUID Oui L'identifiant du projet
userId GUID Oui L'utilisateur à retirer

Réponse (200 OK)

{
  "message": "Utilisateur retiré du projet avec succès"
}

Réponses d'Erreur

Introuvable (404):

{
  "error": "L'utilisateur n'est pas membre de ce projet"
}

Exemples d'Implémentation

cURL

# Lister les utilisateurs du projet
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"

# Ajouter un utilisateur au projet (en tant que membre)
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}'

# Ajouter un utilisateur en tant que propriétaire
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}'

# Promouvoir un utilisateur en propriétaire
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}'

# Retirer un utilisateur du projet
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):
        """Lister tous les utilisateurs avec accès au projet."""
        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):
        """Ajouter un utilisateur au projet."""
        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):
        """Mettre à jour le niveau de permission d'un utilisateur."""
        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):
        """Retirer un utilisateur du projet."""
        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()

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

# Lister les utilisateurs actuels
result = manager.list_users(project_id)
print(f"Le projet compte {result['totalCount']} utilisateurs :")

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

# Ajouter un nouvel utilisateur en tant que membre
new_user_id = 'a1b2c3d4-e5f6-7890-abcd-ef1234567890'
manager.add_user(project_id, new_user_id, is_owner=False)
print(f"Utilisateur {new_user_id} ajouté en tant que membre")

# Promouvoir l'utilisateur en propriétaire
manager.update_permission(project_id, new_user_id, is_owner=True)
print(f"Utilisateur {new_user_id} promu propriétaire")

# Retirer l'utilisateur
manager.remove_user(project_id, new_user_id)
print(f"Utilisateur {new_user_id} retiré")

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

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

// Lister les utilisateurs
const users = await manager.listUsers(projectId);
console.log(`Le projet compte ${users.totalCount} utilisateurs`);

users.users.forEach(user => {
  const role = user.isOwner ? 'Propriétaire' : 'Membre';
  console.log(`  - ${user.displayName} (${role})`);
});

// Ajouter un utilisateur en tant que membre, puis le promouvoir en propriétaire
await manager.addUser(projectId, 'user-id-here', false);
await manager.updatePermission(projectId, 'user-id-here', true);

Bonnes Pratiques

  1. Limiter les Propriétaires : Accordez l'accès propriétaire uniquement aux utilisateurs qui doivent gérer le projet.
  2. Auditer l'Accès : Passez en revue régulièrement les utilisateurs du projet et retirez les accès inutiles.
  3. Utiliser les Membres pour les Analystes : Les analystes réguliers doivent être membres, pas propriétaires.
  4. Documenter les Modifications : Enregistrez les changements de permission à des fins d'audit.