Modifications entre les versions 5 et 31 (s'étendant sur 26 versions)
Version 5 à la date du 2006-11-02 12:02:20
Taille: 2650
Commentaire: proposition : gestion des défauts
Version 31 à la date du 2006-11-15 09:34:52
Taille: 4096
Éditeur: ThomasNoël
Commentaire: adopté
Texte supprimé. Texte ajouté.
Ligne 1: Ligne 1:
Voici ma (ThomasNoël) proposition pour le schéma de la BD de gestion des utilisateurs. ## page was renamed from Projet/GestionDesUtilisateursDesCampus/PropositionThomas
Ligne 3: Ligne 3:
== Table utilisateurs ==   attachment:base_utilisateurs_campus.png
Ligne 5: Ligne 5:
 * '''id'''
 * '''login'''
 * '''mot_de_passe'''
 * '''courriel'''
 * '''nom'''
 * '''prénom'''
 * '''genre'''
 * '''date_naissance'''
 * '''adresses'''
 * '''téléphones'''
 * '''id_organisme''' <!> plusieurs organismes, ça serait mieux non ? (faire une table de correspondance ''1,n'' à part)
 * '''fonction'''
 * '''commentaires'''
--CédricProtière : oui amha pour plusieurs organismes (donc ajouter tables '''organismes''' et '''utilisateurs_organismes''')
Je crois qu'il en est de même pour la fonction (on peut par exemple être enseignant chercheur et étudiant foad en même temps...)
les sources Dia de ce schéma : attachment:base_utilisateurs_campus.dia
Ligne 21: Ligne 7:
== Table utilisateurs_extra == Quelques idées générales :
 * les objets sont 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 ou encore /home/auf/antoine) ou de spécificités de l'utilisateur (par exemple : un attribut ou appartenance à un groupe `compte_systeme` lui donnerait un shell utilisable)
 * un mécanisme 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 organisée de façon hiérarchique (par exemple université->faculté->département). Ainsi, si une personne est de tel département, on sait qu'elle est aussi de telle faculté et de telle université. En outre, une personne peut appartenir à plusieurs organismes ou avoir plusieurs rôles dans un même organisme via des triplets { utilisateur, organisme, fonction }.
Ligne 23: Ligne 14:
 * '''id_utilisateur''' : utilisateur concerné
 * '''variable''' : nom de la variable (par exemple : ''courriel_alias'', ''homedir'')
 * '''valeur'''
Ligne 27: Ligne 15:
== Table groupes == == Les utilisateurs ==
Ligne 29: Ligne 17:
 * '''id'''
 * '''nom'''
 * '''commentaires'''
 Table utilisateurs::
  . id
  . login
  . mot_de_passe
  . courriel
  . nom_complet
  . nom
  . prénom
  . genre
  . date_naissance
  . commentaires
Ligne 33: Ligne 29:
== Table groupes_extra ==  Table utilisateurs_extra::
  . id_utilisateur : utilisateur concerné
  . variable : nom de la variable
  . valeur
Ligne 35: Ligne 34:
 * '''id_groupe'''
 * '''variable'''
 * '''valeur'''
  . ''Exemples de variables extra :''
   . adresse (qui ne sera pas celle de l'organisme avec lequel la personne est relié, cf plus bas)
   . téléphone
   . courriel_canonique (adresse de réécriture en sortie)
   . courriel (n fois)
   . courriel_transfert (forward, quoi. à utiliser si l'adresse de contact != refer)
   . repertoire_courriels (forme serveur:/repertoire)
   . repertoire_fichiers (le HOME, par exemple sous la forme serveur:/repertoire)
   . acces_shell (0/1)
Ligne 39: Ligne 44:
== Table abonnements == == Les groupes ==
Ligne 41: Ligne 46:
 * '''id_utilisateur'''
 * '''id_groupe'''
 * '''date_debut'''
 * '''date_fin'''
 * '''commentaires'''
 Table groupes::
  . id
  . nom
  . commentaires
Ligne 47: Ligne 51:
== Table organismes ==  Table groupes_extra::
  . id_groupe
  . variable
  . valeur
Ligne 49: Ligne 56:
 * '''id'''
 * '''nom'''
 * '''adresses'''
 * '''telephones'''
 * '''id_parent''' : pointe vers un id_organisme (0 pour la racine)
 * '''commentaires'''
== Les abonnements ==
Ligne 56: Ligne 58:
== Table organismes_extra == Un abonnement signifie qu'on place un utilisateur dans un groupe pendant un certain laps de temps.
Ligne 58: Ligne 60:
 * '''id_organisme'''
 * '''variable'''
 * '''valeur'''
 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
Ligne 62: Ligne 68:
--CédricProtière : Nous pourrions créer des règles de gestion pour les défauts (par exemple : email = identifiant@pays.refer.org par défaut), ces règles pouvant être stockées dans le code ou mieux en base.
D'autres défauts seraient statiques (ne dépendent pas de règles, mais du choix de la personne qui a créé un groupe)
je propose de créer les tables '''defaut''' pour certaines tables ci-dessus, par exemple les tables suivantes :
== Table defauts_groupes ==
 * '''id_defaut'''
 * '''fin_abonnement''' ''date de fin de l'abonnement prérenseignée par défaut lors de l'abonnement d'un utilisateur à ce groupe''
== Les organismes ==
Ligne 69: Ligne 70:
== Table defauts_groupes_extra ==
 * '''id_groupe'''
 * '''id_variable'''
 * '''id_defaut''' (ou : on pourrait ajouter cette colonne dans la table '''groupes_extra''')
Ils sont hiérarchisés (arbre simple : un parent peut avoir plusieurs fils).
Ligne 74: Ligne 72:
Si on est forts, on peut même créer une syntaxe pour les règles (pourquoi pas type balises SPIP), qui permettraient de faire des tables du type :
== Table defauts_utilisateurs ==
 * '''id_utilisateur'''
 * '''regle_courriel''' ''pourrait contenir : ''#IDENTIFIANT@#PAYS.refer.org''
 * '''defaut_fonction''' ''etudiant''
 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
  • attachment:base_utilisateurs_campus.png

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

Quelques idées générales :

  • les objets sont 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 ou encore /home/auf/antoine) ou de spécificités de l'utilisateur (par exemple : un attribut ou appartenance à un groupe compte_systeme lui donnerait un shell utilisable)

  • un mécanisme 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 organisée de façon hiérarchique (par exemple université->faculté->département). Ainsi, si une personne est de tel département, on sait qu'elle est aussi de telle faculté et de telle université. En outre, une personne peut appartenir à plusieurs organismes ou avoir plusieurs rôles dans un même organisme via des triplets { utilisateur, organisme, fonction }.

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
  • valeur
  • Exemples de variables extra :

    • adresse (qui ne sera pas celle de l'organisme avec lequel la personne est relié, cf plus bas)
    • téléphone
    • courriel_canonique (adresse de réécriture en sortie)
    • courriel (n fois)
    • courriel_transfert (forward, quoi. à utiliser si l'adresse de contact != refer)
    • repertoire_courriels (forme serveur:/repertoire)
    • repertoire_fichiers (le HOME, par exemple sous la forme serveur:/repertoire)
    • acces_shell (0/1)

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)