# Gestion des utilisateurs dans ScoDoc

ScoDoc gère sa propre base d'utilisateurs (enseignants, administratifs,
secrétaires). Rappelons que les étudiants ne sont pas des utilisateurs, ils
n'ont pas d'accès direct au logiciel.

## Principes généraux

Les utilisateurs sont associés à:

- un identifiant unique (`user_name`), propre à ScoDoc;
- une adresse email;
- un ensemble de rôles;
- un département ScoDoc de rattachement (optionnel);
- un statut actif/inactif.
- d'autres attributs, comme l'identifiant CAS (voir [Configuration du CAS](ConfigCAS.md))

### Rôles et permissions

Les rôles sont eux-même associés à des permissions: on donne une permission (ex:
"enregistrer des absences") à un ou plusieurs rôles, et on associe chaque compte
utilisateur à un ou plusieurs rôles. Ce système est à la fois flexible et facile
à configurer. Plus de détails [sur la page dédiée](ConfigPermissionsDept.md).

Un rôle permet de grouper un ensemble de permissions nécessaire pour remplir des
tâches données (secrétariat, responsable de formation, intervenant enseignant,
...).

Un utilisateur peut être associé à un nombre quelconque de rôle, chaque
association étant valable pour un département donné (ou bien éventuellement
tous). Il peut ainsi être "Responsable" dans un département et "Enseignant" dans
un autre.

### Département de rattachement

Le département de rattachement est utilisé pour afficher rapidement la liste des
comptes d'un département (accès par un responsable de formation, chef de
département, ...). Certains comptes ne sont pas rattachés à un département
(administrateurs).

### Fermeture des comptes

En principe, on ne **supprime** pas de compte utilisateur s'ils ont déjà été
utilisés. En effet, afin de permettre la traçabilité des opérations, ScoDoc
conserve des références aux utilisateurs. Pour fermer un compte, on le rend
**inactif**. Un utilisateur inactif ne peut plus se connecter, et n'apparait pas
dans les listes par défaut.

## Opérations et cycle de vie des utilisateurs

Un compte utilisateur peut être modifié par 3 types d'utilisateurs :

- L'utilisateur lui-même ;
- un administrateur du département de rattachement de l'utilisateur ;
- le super administrateur.

Les opérations existantes sont :

- La création;
- la demande de renouvellement de mot de passe;
- la désactivation.

### Notes

- La suppression d'un utilisateur est impossible (nécessité de garder la trace
  des anciens historiques), mais on peut le rendre inactif (il n'apparait alors
  pas dans la liste).)
- Le mécanisme de changement de mot de passe de ScoDoc 7 (par envoi d'un nouveau
  mot de passe par mail) a été remplacé par l'ajout de la mention suivante dans
  le formulaire de connexion :
  
```text
  En cas d'oubli de votre mot de passe cliquez ici pour le réinitialiser.
```

### Création d'un utilisateur (par formulaire)

La création d'un utilisateur peut être faite par un administrateur ou super
administrateur. Le lien `Ajouter un utlisateur` permettant cela se trouve dans
la page de gestion des utilisateurs (accessible par le menu latéral)

**Le mot de passe** peut être

- saisi par le créateur de l'utilisateur (il appartient alors au créateur de
  communiquer ce mot de passe à l'utilisateur final);
- ou initialisé à une valeur non communiquée, à charge pour l'utilisateur final
  de finaliser la création du mot de passe avant d'utiliser son accès (il y est
  invité par un email qui lui est envoyé).

**Les options de création (mail)** permettent également de choisir parmi les 3
scenarii suivants :

1. un message d'accueil l'invitant à initialiser son mot de passe ;
2. un message de bienvenue simple ;
3. aucun message.

Une case à cocher `envoyer un mail d'accueil à l'utlisateur` permet de choisir
la troisième option (si décochée), sinon la case suivante `indiquer par mail de
changer le mot de passe initial` permet de choisir entre l'option 1 et l'option
   

Dans tous les cas les mails seront envoyés avec l'adresse de réponse précisée
par la valeur de la variable de configuration `email_from_addr`, qui peut être
spécifié au niveau général ou département par département (voir
[Configuration des envois d'emails](ConfigEmail.md))

**Le département d'appartenance** peut être choisi si le créateur est
administrateur pour plusieurs départements. Il aura alors le loisir  
de sélectionner l'un des départements qu'il administre (liste déroulante).

### Création en masse (fichier xlsx)

Le super-administrateur (et lui seulement) peut également créer des comptes en
masse par téléversement d'un fichier au format `.xlsx` par le biais du lien
`importer des utilisateurs` de la même page de gestion des utilisateurs.

La page affichée lui permet d'importer un modèle qu'il doit compléter et re-soumettre à ScoDoc 
selon le même schéma que la saisie de note par fichier Excel.

Les colonnes à remplir sont les suivantes :

- `user_name`: le nom de connexion de l'utilisateur; (obligatoire, unique dans scodoc)
- `nom`: le nom de l'utilisateur ; (obligatoire)
- `prenom`: le prénom de l'utilisateur ; (obligatoire)
- `email`: l'email de l'utilisateur ; (obligatoire, unique dans scodoc)
- `roles`: le ou les rôles attribués à l'utilisateur séparés par des virgules (exemple `Admin_RT, Ens_GEII`)
- `dept`: le département de rattachement de l'utilisateur (acronyme, en lettres capitales).
- `cas_id`, ...: optionnel, voir [Configuration du CAS](ConfigCAS.md)

_Note_:

- Tous les utilisateurs sont créés ou bien aucun.
- Un mail est envoyé à chaque utilisateur nouvellement créé.

### Changement du mot de passe

Deux circonstances sont envisagées.

#### Oubli de mot de passe

Lorsqu'un utilisateur a perdu son mot de passe, il a la possibilité de retrouver
son accès sans intervention d'un administrateur. Il lui suffit de demander la
réinitialisation par le lien situé sur la page de connexion. Après renseignement
de son email (qui est maintenant identifiant dans scodoc), un mail lui est
envoyé. ce mail contient un lien comportant un jeton à durée limitée. Ce lien
renvoie vers la page permettant de redéfinir le mot de passe de l'utilisateur.

#### Édition du profil

Si l'utilisateur peut se connecter, il peut éditer son profil (et par là,
modifier son email et/ou son mot de passe). La barre latérale de l'écran
principal de scodoc affiche dans le coin supérieur gauche la version courante de
scodoc ainsi que l'identification de l'utilisateur actuel. Un clic sur le nom
permet à l'utilisateur d'éditer son profil.

### Activation/désactivation

Une fois créé, le compte utilisateur conserve son existence. Il peut cependant être rendu inactif:

- soit à l'expiration de la date de validité spécifiée à la création ou lors d'un modification
- soit directement par un administrateur.

Quelle que soit la procédure, le compte existe encore et conserve son email (il
n'est donc pas possible de créer un nouveau compte associé au même email). Il
est simplement impossible de se connecter ou de modifier le profil de ce compte
par l'utilisateur lui-même. 

## Implémentation (pour les développeurs)

Le graphe d'état ci-dessous explicite les différents états que peux prendre un
compte utilisateur en fonction des opérations qu'il subit.

On notera:

1. Que la création (1) peut le placer initialement dans deux états différents
   selon le mode de création choisi.
2. Que l'on peut demander le renouvellement du mot de passe plusieurs fois même
   sans avoir complété la procédure.
3. Que les états `créé`et `créé + ticket`permettent la connexion (sous réserve
   de la connaissance du mot de passe).

<img src="/fig/GrapheUser.png" />

**SCODOC**.

La table **user** contient:

|  **Colonne**      | **Type**                    |   Contenu                                                    | Modifié par    |
|-------------------|-----------------------------|--------------------------------------------------------------|----------------|
| id                | integer                     | identifiant interne unique                                   |  1             |
| user_name         | character varying(64)       | nom de login                                                 |  1             |
| email             | character varying(120)      | adresse mail (unique dans la base)                           |  1, 6          |
|nom                | character varying(64)       |                                                              |  1, 6          |
|prenom             | character varying(64)       |                                                              |  1, 6          |
|dept               | character varying(32)       | département de rattachement (identifiant numérique)          |  1, 6          |   
|active             | boolean                     |                                                              |  1, 7, 9       |
|password_hash      | character varying(128)      | hash password                                                |  1, 6          |
|password_scodoc7   | character varying(42)       | deprecated (utilisé lors de la migration scodoc7 > scodoc9)  |  1, 2, 4, 5, 6 |
|last_seen          | timestamp without time zone | date de dernière connexion                                   |  1, A         |
|date_modif_passwd  | timestamp without time zone |                                                              |  1, 2, 4, 5, 6 |
|date_created       | timestamp without time zone |                                                              |  1             |
|date_expiration    | timestamp without time zone |                                                              |  1             |
|passwd_temp        | boolean                     | deprecated                                                   |                |
|token              | text                        | dernier token émis (changement de mot de passe)              |  1a, 3         |                 
|token_expiration   | timestamp without time zone | date d'expiration du dernier token émis                      |  1a, 3         |

(les champs utilisé pour le CAS ne sont pas mentionnés ici)

🚸 encodage `utf-8`, sauf si vous avez modifié l'installation.

Pour la signification des rôles et l'utilisation du département, voir
[ConfigPermissions](ConfigPermissions.md).

!!! note "Voir aussi"

    - [Configuration du CAS](ConfigCAS.md)
    - [Guide administrateur ScoDoc](GuideAdminSys.md)
    - [Configuration des envois d'emails](ConfigEmail.md)
    - [FAQ](FAQ.md)
    - [Contacts](Contact.md)
