Modifications entre les versions 3 et 25 (s'étendant sur 22 versions)
Version 3 à la date du 2006-10-30 11:04:57
Taille: 4845
Éditeur: ThomasNoël
Commentaire:
Version 25 à la date du 2006-11-09 10:08:56
Taille: 4156
Éditeur: ThomasNoël
Commentaire:
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
Voici mes (ThomasNoël) idées et propositions pour le système de gestion des utilisateurs.

= Rappels =

 . '''Objectifs du projet''' : unifier nos systèmes d'authentification et nos outils de suivi des utilisateurs des CNF.
 . '''Résultats attendus''' : simplifier le travail de tous en factorisant les soucis : les problèmes ne seront plus locaux, ils seront plus simples à résoudre si tout le monde fonctionne un peu de la même façon au départ.
 . '''Contraintes''' : l'existant est très fort (NIS, passwd, LDAP, Samba, ...) et il faut prévoir toute sorte de particularités locales (services purement locaux, campus intégré, etc.)

= Idées générales =

Le système se décompose en trois parties :

 Une base de données:: elle décrit l'ensemble des utilisateurs et des abonnements associés. Elle doit avoir un schéma simple mais permettant de multiples extensions. Voir ci-dessous pour ma proposition de structure.

 Des logiciels de gestion de la base de données:: de quoi remplir et gérer la base de données, notamment :
  1. une interface Web, rapide et ergonomique
  1. une interface en ligne de commande pour permettre une gestion "système"
  1. plus tard, un application native pour Gnome ou KDE

 Des systèmes d'extraction vers le système:: tout ce qu'il faut pour extraire les données systèmes, pas exemple:
  1. les fichiers {{{/etc/passwd}}} et {{{/etc/shadow}}} pour être utilisés sur un serveur NIS
  1. les fichiers {{{/etc/aliases}}}, {{{/etc/postfix/virtual}}}, etc, pour la messagerie
  1. une base de données d'authentification MySQL
  1. une base de données MySQL pour la messagerie
  1. un arbre LDAP
  1. etc. : tout autre système actuellement utilisé pour la gestion des services utilisateurs

= Le logiciel de gestion de la base =

En utilisant un système comme Django, on simplifie la programmation. Le mode objet devrait permettre de proposer des extensisons assez facilement. En outre, l'API de gestion étant disponible en Python, on peut l'utiliser directement pour écrire les outils en ligne de commande sans ré-inventer la roue.

L'idée est donc d'avoir un système Django/Python qui proposer toute l'API de gestion : ensuite au niveau des applications on n'aura qu'à appeler l'API, sans jamais toucher directement à la base de données (pas de requête SQL directe).

= Les systèmes d'extraction =

A partir d'un système comme Django, on peut extraire les données assez facilement via des ''templates''. Pour la plupart des extractions il ne sera pas nécessaire à l'administrateur système de savoir programmer en Python.

= Schéma de la base de données =

== Idées générales ==

 * des utilisateurs, des groupes et des abonnements qui permettent de dire que tel utilisateur est dans tel groupe de telle à telle date
 * la base n'est pas destinée à être utilisée telle quelle pour l'authentification ou la gestion système : des ''backends'' sont disponibles pour créer, à partir de cette base, les données système nécessaires (fichiers ''passwd+shadow'', base MySQL-auth, arbre LDAP, htpasswd, etc).
 * par défaut la base ne contient pas de données purement "système" : ces données (comme le shell, la homedir, etc) sont calculées par les backend, éventuellement en fonction de conditions locales (exemple: homedir du type /home/a/n/antoine).
 * un mecanisme de champ "extra" permet d'étendre les tables en associant des variables à un utilisateur, un groupe ou autre (merci JérômeSantini pour cette chouette idée)
 * la gestion des organismes d'appartenance est hierarchisée (par exemple université->faculté->département). Ainsi, si une personne est de tel département, on sait qu'elle est aussi de telle fac et de telle université.
Voici ma (ThomasNoël) proposition pour le schéma de la BD de gestion des utilisateurs.
Ligne 49: Ligne 4:
== Table utilisateurs ==   attachment:base_utilisateurs_campus.png
Ligne 51: Ligne 6:
 * '''id'''
 * '''login'''
 * '''mot_de_passe'''
 * '''courriel'''
 * '''nom'''
 * '''prénom'''
 * '''genre'''
 * '''date_naissance'''
 * '''adresses'''
 * '''téléphones'''
 * '''id_organisme'''
 * '''fonction'''
 * '''commentaires'''
Version UML (Très Basique) [http://tedia2sql.tigris.org/usingtedia2sql.html http://tedia2sql.tigris.org/usingtedia2sql.html]
Ligne 65: Ligne 8:
== Table utilisateurs_extra == Exemple génération SQL:
{{{
   tedia2sql -t postgres -f -m -v1 -i ./base_utilisateurs_campus_uml.dia -o ./base_utilisateurs_campus.sql
}}}
Ligne 67: Ligne 13:
 * '''id_utilisateur''' : utilisateur concerné
 * '''variable''' : nom de la variable (par exemple : ''courriel_alias'', ''homedir'')
 * '''valeur'''
  attachment:base_utilisateurs_campus_uml.png
Ligne 71: Ligne 15:
== Table groupes == les sources Dia de ce schéma : attachment:base_utilisateurs_campus.dia
Ligne 73: Ligne 17:
 * '''id'''
 * '''nom'''
 * '''commentaires'''
les sources Dia du schéma UML : attachment:base_utilisateurs_campus_uml.dia
Ligne 77: Ligne 19:
== Table groupes_extra == SQL généré pour PostgreSQL : attachment:base_utilisateurs_campus.sql
Ligne 79: Ligne 21:
 * '''id_groupe'''
 * '''variable'''
 * '''valeur'''
= Les utilisateurs =
Ligne 83: Ligne 23:
== Table abonnements ==  Table utilisateurs::
  . id
  . login
  . mot_de_passe
  . courriel
  . nom_complet
  . nom
  . prénom
  . genre
  . date_naissance
  . commentaires
Ligne 85: Ligne 35:
 * '''id_utilisateur'''
 * '''id_groupe'''
 * '''date_debut'''
 * '''date_fin'''
 * '''commentaires'''
 Table utilisateurs_extra::
  . id_utilisateur : utilisateur concerné
  . variable : nom de la variable (par exemple : ''courriel_alias'', ''homedir'', ''adresse'', ''téléphone'')
  . valeur
Ligne 91: Ligne 40:
== Table organismes == Tini voudrait tout passer en champ extra ../PropositionTini ... mais... je sais pas, qu'en pensez-vous ?
 . MS: Pourquoi? Pourquoi tu préfères avoir beaucoup de renseignements dans la table principale et Tini moins? Zavez p'tet des arguments qui sautent pas aux yeux. Sur le principe, ok, pour abonner un utilisateur, on a pas besoin de grand chose, id, nom/prénom, login. Mais à l'usage, on ne prendra jamais le temps de remplir les extras si on ne le fait pas dès le début.(J'imagine que la table principale, tous les champs sont à renseigner, alors qu'en extra non.)
 . TN : tu as vu juste et je suis d'accord avec ton raisonnement. Moi je préfère que la table de base contienne quand même quelques infos "obligatoires". Par ailleurs pour l'API ça pourrait quand même être plus simple à gérer. En fait, Jérôme avait surtout un soucis avec la prédominance du champ "courriel" sur les possibles champs extra "courriel_forward" et "courriel_alias". Je ne sais pas s'il a avancé dans ses reflexions pendant qu'il dé-spaghettisait le firewall de Niamey ;)
 . MS : Pourquoi "courriel_forward" et "courriel_alias"? On a besoin d'enregistrer tant d'info sur nos utilisateurs? Un seul mail, celui fournit par le CNF, les utilisations de yahoo/hotmail n'étant pas recommandé.
 . TN : parce que ça serait bien dommage de s'en priver, et que y'a toujours des cas particuliers à gérer... Ne serait-ce que pour les mails @auf.org (on a tous deux adresses : @XX.auf.org et @auf.org)
Ligne 93: Ligne 46:
 * '''id'''
 * '''nom'''
 * '''adresses'''
 * '''telephones'''
 * '''id_parent''' : pointe vers un id_organisme (0 pour la racine)
 * '''commentaires'''
= Les groupes =
Ligne 100: Ligne 48:
== Table organismes_extra ==  Table groupes::
  . id
  . nom
  . commentaires
Ligne 102: Ligne 53:
 * '''id_organisme'''
 * '''variable'''
 * '''valeur'''
 Table groupes_extra::
  . id_groupe
  . variable
  . valeur

= Les abonnements =

Un abonnement signifie qu'on place un utilisateur dans un groupe pendant un certain laps de temps.

 Table abonnements::
  . id_utilisateur
  . id_groupe
  . date_debut
  . date_fin
  . suspendu : mis à ''vrai'' si l'abonnement est interrompu temporairement (idée de SébastienDornano)
  . commentaires

= Les organismes =

Ils sont hiérarchisés (arbre simple : un parent peut avoir plusieurs fils).

 Table organismes::
  . id
  . nom
  . adresses
  . telephones
  . id_organisme_parent : pointe vers un id_organisme (0 pour la racine)
  . commentaires

 Table organismes_extra::
  . ''note : je ne suis pas sûr de l'utilité de ces extras''
  . id_organisme
  . variable
  . valeur

Chaque utilisateur peut être rattaché à un ou plusieurs organismes. A chaque rattachement on indique la fonction de l'utilisateur dans l'organisme, via un triplet { utilisateur, organisme, fonction }. On peut donc imaginer qu'un utilisateur puisse avoir plusieurs fonctions au sein d'un même organisme.

 Table fonction::
  . id
  . nom
  . commentaires

 Table fonction_extra::
  . ''note : je ne suis pas sûr de l'utilité de ces extras''
  . id_fonction
  . variable
  . valeur

 Table utilisateur_organisme_fonction::
  . id_utilisateur
  . id_organisme
  . id_fonction
  . date_debut (idée pompée sur la proposition de Seb)
  . date_fin
  . commentaires

Voici ma (ThomasNoël) proposition pour le schéma de la BD de gestion des utilisateurs.

  • attachment:base_utilisateurs_campus.png

Version UML (Très Basique) [http://tedia2sql.tigris.org/usingtedia2sql.html http://tedia2sql.tigris.org/usingtedia2sql.html]

Exemple génération SQL:

   tedia2sql -t postgres -f -m -v1 -i ./base_utilisateurs_campus_uml.dia -o ./base_utilisateurs_campus.sql
  • attachment:base_utilisateurs_campus_uml.png

les sources Dia de ce schéma : attachment:base_utilisateurs_campus.dia

les sources Dia du schéma UML : attachment:base_utilisateurs_campus_uml.dia

SQL généré pour PostgreSQL : attachment:base_utilisateurs_campus.sql

Les utilisateurs

Table utilisateurs
  • id
  • login
  • mot_de_passe
  • courriel
  • nom_complet
  • nom
  • prénom
  • genre
  • date_naissance
  • commentaires
Table utilisateurs_extra
  • id_utilisateur : utilisateur concerné
  • variable : nom de la variable (par exemple : courriel_alias, homedir, adresse, téléphone)

  • valeur

Tini voudrait tout passer en champ extra ../PropositionTini ... mais... je sais pas, qu'en pensez-vous ?

  • MS: Pourquoi? Pourquoi tu préfères avoir beaucoup de renseignements dans la table principale et Tini moins? Zavez p'tet des arguments qui sautent pas aux yeux. Sur le principe, ok, pour abonner un utilisateur, on a pas besoin de grand chose, id, nom/prénom, login. Mais à l'usage, on ne prendra jamais le temps de remplir les extras si on ne le fait pas dès le début.(J'imagine que la table principale, tous les champs sont à renseigner, alors qu'en extra non.)
  • TN : tu as vu juste et je suis d'accord avec ton raisonnement. Moi je préfère que la table de base contienne quand même quelques infos "obligatoires". Par ailleurs pour l'API ça pourrait quand même être plus simple à gérer. En fait, Jérôme avait surtout un soucis avec la prédominance du champ "courriel" sur les possibles champs extra "courriel_forward" et "courriel_alias". Je ne sais pas s'il a avancé dans ses reflexions pendant qu'il dé-spaghettisait le firewall de Niamey ;)

  • MS : Pourquoi "courriel_forward" et "courriel_alias"? On a besoin d'enregistrer tant d'info sur nos utilisateurs? Un seul mail, celui fournit par le CNF, les utilisations de yahoo/hotmail n'étant pas recommandé.
  • TN : parce que ça serait bien dommage de s'en priver, et que y'a toujours des cas particuliers à gérer... Ne serait-ce que pour les mails @auf.org (on a tous deux adresses : @XX.auf.org et @auf.org)

Les groupes

Table groupes
  • id
  • nom
  • commentaires
Table groupes_extra
  • id_groupe
  • variable
  • valeur

Les abonnements

Un abonnement signifie qu'on place un utilisateur dans un groupe pendant un certain laps de temps.

Table abonnements
  • id_utilisateur
  • id_groupe
  • date_debut
  • date_fin
  • suspendu : mis à vrai si l'abonnement est interrompu temporairement (idée de SébastienDornano)

  • commentaires

Les organismes

Ils sont hiérarchisés (arbre simple : un parent peut avoir plusieurs fils).

Table organismes
  • id
  • nom
  • adresses
  • telephones
  • id_organisme_parent : pointe vers un id_organisme (0 pour la racine)
  • commentaires
Table organismes_extra
  • note : je ne suis pas sûr de l'utilité de ces extras

  • id_organisme
  • variable
  • valeur

Chaque utilisateur peut être rattaché à un ou plusieurs organismes. A chaque rattachement on indique la fonction de l'utilisateur dans l'organisme, via un triplet { utilisateur, organisme, fonction }. On peut donc imaginer qu'un utilisateur puisse avoir plusieurs fonctions au sein d'un même organisme.

Table fonction
  • id
  • nom
  • commentaires
Table fonction_extra
  • note : je ne suis pas sûr de l'utilité de ces extras

  • id_fonction
  • variable
  • valeur
Table utilisateur_organisme_fonction
  • id_utilisateur
  • id_organisme
  • id_fonction
  • date_debut (idée pompée sur la proposition de Seb)
  • date_fin
  • commentaires

Projet/GUIA/SchemaBase/HistoriquePropositionThomas (dernière édition le 2008-02-21 22:10:00 par localhost)