DRAFT — Preliminary version, do not share. · Version préliminaire, ne pas partager.

Licences : servir vos propres clients

Une licence représente l'un de vos clients au sein de votre projet. Chaque licence possède ses propres utilisateurs, ses propres options et ses propres sites, de sorte que votre client peut voir et gérer ce qui lui appartient sans accéder au reste de votre projet. Vous gérez les licences dans Connect ou via la Public API.

Avant de commencer

Fonctionnement

Project
 ├── License type "Parking"          declares the options its licenses carry
 │     ├── capacity     Number   required
 │     └── is_covered   True/False   default false
 │
 ├── License "Downtown garage"       of type Parking
 │     ├── options       capacity = 450, is_covered = true
 │     ├── meta_data     free-form JSON
 │     ├── users         license_manager, license_viewer
 │     └── sites ──▶ zones
 └── License "North lot"             of type Parking

1. Définir un type de licence

Dans Connect, ouvrez les paramètres de votre projet et accédez à License types. Créez un type et ajoutez ses champs d'option. Si vous ajoutez un champ ultérieurement, chaque licence existante de ce type reçoit ce champ avec sa valeur par défaut.

2. Créer une licence

Dans Connect, accédez à Licenses et sélectionnez Create License. Vous pouvez aussi utiliser l'API, avec l'ID du type de licence et une entrée par champ d'option :

fun api v2 licenses create-license --project-id <project-id> --body '{
  "name": "Downtown garage",
  "license_type_id": <license-type-id>,
  "options": [
    {"license_option_field_id": <capacity-field-id>, "value": 450},
    {"license_option_field_id": <is-covered-field-id>, "value": true}
  ],
  "meta_data": {"customer_ref": "ACME-001"}
}'

Une option obligatoire doit avoir une valeur non vide et non nulle. Listez les licences avec fun api v2 licenses list-licenses --project-id <project-id> : chacune comprend son license_type et ses options avec field_id, field_name et value.

3. Inviter les utilisateurs de votre client

Deux rôles s'appliquent à une licence :

Rôle Peut
license_manager Lire et modifier la licence, et gérer les utilisateurs de celle-ci ainsi que de tous les sites qui en dépendent
license_viewer Consulter la licence, rien de plus

Invitez un utilisateur par e-mail. container_item_id est l'ID de la licence :

fun api v2 licenses-users-invitations create-license-invitation \
  --project-id <project-id> --license-id <license-id> --body '{
  "name": "Jane Doe",
  "email": "jane.doe@example.com",
  "role_id": <license-manager-role-id>,
  "container_item_id": <license-id>,
  "options": {},
  "redirect_url": "https://app.example.com/",
  "custom_message": "Welcome to your parking dashboard."
}'

L'utilisateur reçoit un e-mail et arrive sur redirect_url après s'être connecté. Consultez Rôles et autorisations pour les statuts d'invitation et la manière de trouver un role_id.

4. Ajouter des sites

Les sites sont les emplacements de votre client. Dans Connect, ouvrez la licence, sélectionnez Sites, puis New Site, et saisissez un nom et une adresse. Les sites peuvent être divisés en zones (étages, pièces, niveaux de parking), chacune avec son propre plan 2D.

5. Donner accès à un seul site

Pour donner accès à un seul site, invitez la personne sur ce site :

fun api v2 sites-users-invitations create-site-invitation \
  --project-id <project-id> --license-id <license-id> --site-id <site-id> --body '{
  "name": "Sam Lee",
  "email": "sam.lee@example.com",
  "role_id": <role-id>,
  "container_item_id": <site-id>,
  "options": {},
  "redirect_url": "https://app.example.com/"
}'

Un gestionnaire de licence, un gestionnaire de projet et un administrateur d'organisation peuvent tous gérer les utilisateurs d'un site, chacun à son propre niveau.

Restreindre les personnes pouvant rejoindre

Dans Connect, un projet, une licence ou un site peut porter une politique d'utilisateurs : une liste de domaines d'e-mail autorisés, et l'indication que les comptes doivent se connecter avec Google, Microsoft ou l'un ou l'autre. Une licence ne peut pas être plus permissive que son projet.

Étapes suivantes