HOWTO développement Sashipa

 ConfigStorage: Comment définir le stockage de la configuration.

Vous souhaitez définir comment votre application Sashipa gère les profils utilisateurs.

Aperçu

La configuration est gérée par le serveur Sashipa. Trois modes de stockage sont disponibles:

Le mode de stockage d'une configuration est défini pour chaque serveur. Un client sashipa (gui instance) utilise un seul serveur pour récupérer les profils utilisateurs:

  <guiInstance gui='guiDemoContact' type='application'>
    <guiResourceName>GuiDemoContact</guiResourceName>
    <usedConfigStorage server='srvDemoContact' />
    <usedServerForDatabase server='srvDemoContact' database='dbDemoContact' />
    ... guiLoaderBinaryUnit ...
  </guiInstance>

Note : si le serveur de configuration n'a de stockage de configuration, l'application cliente essaiera de se connecter automatiquement en anonymous.

Stocker la configuration dans une table SQL

Tout d'abord, un élément 'sashipaConfigStorage' doit être décrit dans l'élément 'database' du fichier source Sashipa :

  <database name='dbDemoContact'>
    ... physicalName ...
    ... singularName ...

    <sashipaConfigStorage name='cfgMain'>
      <configSashipaTable>
        <physicalName>SASHIPA_CFG</physicalName>
      </configSashipaTable>
    </sashipaConfigStorage>

    ... schemaTableSet ...

Note : cette déclaration ne rend pas la table accessible comme une schemaTable.

Puis il suffit de référencer cet élément depuis l'élément 'server', comme ceci :

  <serverSet>
    <server name='srvDemoContact' type='embeddedInGui'>

      ... element dbConnection ...

      <configStorage>
        <configDbStorage database='dbDemoContact' sashipaConfigStorage='cfgMain' />
      </configStorage>

      ... element logStorage ...

    </server>
  </serverSet>

La structure d'une table de stockage de la configuration Sashipa doit être :

  CREATE TABLE SASHIPA_CFG (
    s_id integer NOT NULL PRIMARY KEY,
    s_type char(4) NOT NULL,
    s_key varchar(100) NOT NULL,
    s_value clob,        -- replace 'clob' by the unlimited text
                         -- column type of your dbms
    UNIQUE (s_type, s_key)
  );

La colonne s_type contiendra le type de donnée stockée. Dans le cas du stockage de comptes utilisateurs, la valeur contenue sera toujours 'USER'. La colonne s_key contiendra la valeur qui identifiera les données stockées pour un type donné. Important : cette valeur (textuelle) est toujours stockée en minuscules (lower case). Dans le cas des comptes utilisateurs, c'est le login qui sera stocké ici. La colonne s_value contiendra les données à stocker. Pour les comptes utilisateurs, la valeur stockée sera au format XML.

Un profil utilisateur est stocké dans un format XML. Voici un exemple de profil :

  <userProfile>
    <login>Test</login>
    <password>test</password>
    <completeName>M. Test</completeName>
    <accessRightSet defaultType='using'>
      <accessRight guiModule='modMain' type='readOnly' />
      <accessRight guiModule='modAutre' type='noAccess' />
      <accessRight guiModule='modEncore' type='default' />
    </accessRightSet>
    <entry guiStarting='startingDefault' />
  </userProfile>

Les éléments accessRight spécifient les droits d'accès pour chaque module. Si un module n'est pas spécifié, c'est l'attribut accessRightSet.defaultType qui sera utilisé. La valeur 'default' signifie que c'est la valeur par défaut spécifiée pour le module dans le code du serveur, qui sera utilisée (ou 'using' si le serveur ne définit pas cette valeur). L'élément entry est optionnel, il correspond au nom d'un des éléments guiStarting dans le source Sashipa de l'application.

Maintenant il vous faut insérer manuellement les comptes utilisateurs (l'application d'administration n'est pas encore prête). Exemple:

  /* insert two users. Please note that values in s_key must be in lower case. */
  insert into SASHIPA_CFG values (
    1, 'USER', 'anonymous',
    '<userProfile><login>anonymous</login><password></password> <completeName>Anonymous</completeName><accessRightSet defaultType=''readOnly'' /></userProfile>'
    );
  insert into SASHIPA_CFG values (
    2, 'USER', 'test',
    '<userProfile><login>Test</login><password>test</password> <completeName>M. Test</completeName><accessRightSet /></userProfile>'
    );

Note : Database2Sashipa reconnait automatiquement cette table en tant que table de stockage de la configuration, à condition que son nom contienne la chaîne de caractère 'SASHIPA_CFG' (peu importe la casse).

Stocker la configuration dans un fichier XML externe

Maintenant, voyons un exemple de stockage de la configuration dans un fichier XML externe. Voici le contenu de l'élément 'configStorage' de votre fichier Sashipa :

  <serverSet>
    <server name='srvDemoContact' type='embeddedInGui'>

      ... element dbConnection ...

      <configStorage>
        <configFileStorage><
          uri>SASHIPA_CFG.xml</uri>
        </configFileStorage>
      </configStorage>

      ... element logStorage ...

    </server>
  </serverSet>

... et voici un exemple de fichier XML 'SASHIPA_CFG.xml' :

  <?xml version='1.0' encoding='ISO-8859-1' ?>
  <!DOCTYPE configStorage [
    <!ELEMENT configStorage (userProfileSet) >
    <!ATTLIST configStorage version CDATA #REQUIRED >
    <!ELEMENT userProfileSet (userProfile*) >
    <!ELEMENT userProfile (login, password, completeName, accessRightSet, entry?) >
    <!ELEMENT login (#PCDATA) >
    <!ELEMENT password (#PCDATA) >
    <!ELEMENT completeName (#PCDATA) >
    <!ELEMENT accessRightSet (accessRight*) >
    <!ATTLIST accessRightSet defaultType (default | readOnly | using | noAccess) 'default' >
    <!ELEMENT accessRight EMPTY >
    <!ATTLIST accessRight guiModule CDATA #REQUIRED >
    <!ATTLIST accessRight type (default | readOnly | using | noAccess) #REQUIRED >
    <!ELEMENT entry EMPTY >
    <!ATTLIST entry guiStarting CDATA #REQUIRED >
  ]>

  <configStorage version='1.0.1'>
    <userProfileSet>
      <userProfile>
        <login>anonymous</login>
        <password></password>
        <completeName>Anonymous</completeName>
        <accessRightSet defaultType='readOnly' />
      </userProfile>
      <userProfile>
        <login>Test</login>
        <password>test</password>
        <completeName>Mr Test</completeName>
        <accessRightSet />
      </userProfile>
    </userProfileSet>
  </configStorage>

Pas de stockage de la configuration

Il suffit de définir l'élément 'configStorage' comme élément vide dans votre fichier source Sashipa :

  <serverSet>
    <server name='srvDemoContact' type='embeddedInGui'>

      ... element dbConnection ...

      <configStorage />

      ... element logStorage ...

    </server>
  </serverSet>

Le serveur Sashipa acceptera toutes les connexions des clients.

Remarques

Remarque : La gestion des login est insensible à la casse. Les mots de passes sont évidemment sensibles à la casse, eux.

© Copyright 2004 Sashipa-Melba Team. Ce document de la technologie Sashipa-Melba est sous licence GNU FDL Vous pouvez le copier et modifier librement les copies tant que cette mention apparaît clairement.