
## Rôles utilisateurs

  Il existe 2 types de rôle : 
   - Administratif qui sont stocké sur le champs `roles` : 
     - `Administrator`, 
     - `SuperAdmin`, 
     - `Manager`
   - Métier qui sont stocké sur le champs `auth_roles` : 
     - `superadministrateur`, 
     - `demandeur`, 
     - `bailleur`, 
     - `entreprise`, 
     - `cre`, 
     - `rdsl`, 
     - `reservataire`, 
     - `collaborateur offre logement`, 
     - `collaborateur entreprises`
  
  Le role `superadministrateur` permet d'outrepasser les droits  

## Réservataire

    Création d'un Porteur de reservation via POST /api/dmo/reservation_holder
    
    Ajout d'un attribut reservation_holder_id sur les offres et demandes pour donner les droits aux utilisateurs avec le auth_roles 'reservataire' et le reservation_holder_id correspondant

## Connexion "en tant que"

### Pour les utilisateurs "collaborateur offre logement"
    
    POST api/dmo/applicants/{ID de l'applicant}/switch

Retourne un token pour pouvoir se connecter "en tant que" l'utilisateur (i.e. target) dont le `main_applicant_id` correspond à l'ID renseigné dans la requête.

    {
      "success": true,
      "info": "Enregistré",
      "email": "email de l'utilisateur target",
      "login": "login de l'utilisateur target",
      "jwt_token": "nouveau_token_genere_pour_le_log_as"
    }

Un collaborateur offre logement connecté "en tant que" aura accès à toutes les requêtes API dont l'utilisateur target a accès.

### Pour les utilisateurs "entreprise"

Le params `entity_id` est **obligatoire** dans le body de la requête : 
    
    POST api/dmo/applicants/{ID de l'applicant}/switch

Avec en body : 

    {
      entity_id: "ID de l'entity"
    }

La réponse est en "success" uniquement si :
  - • L'utilisateur "entreprise" qui switch est **au moins** lecteur de l'`entity_id`.
  - • Il existe une délégation entre l'`entity_id` et l'`applicant_id` renseigné dans la requête API.
  - • La délégation est signée.

Elle retourne un token pour pouvoir se connecter "en tant que" comme précédemment.

Un utilisateur entreprise connecté "en tant que" grâce à la délégation n'aura seulement accès qu'aux requêtes API de la demande de logement (`api/dmo/housing_requests/...`)




## Création d'utilisateur
  Les rôles suivant peuvent créer des utilisateurs : 

    Administrator
    SuperAdmin
    Manager
    superadministrateur
    entity
    bailleur
    rdsl
    cre

  Les `superadministrateur` ne peuvent être créés que par des utilisateurs ayant les rôles suivant :

    Administrator
    SuperAdmin
    Manager
    superadministrateur

  Pour créer ou mettre à jour un utilisateur

      POST | PATCH /api/dmo/users 
        data: {
          attributes: {
            first_name: 'John', 
            last_name: 'Doe', 
            email: 'johndoe@mail.com',
            phone_number: '1234567890',
            gender: 'M',
            auth_roles: ['cre'],
          }
        }

  Lors de la création ou mise à jour d'un compte utilisateur, le compte utilisateur beiam lié est créé ou mis à jour.
