# Variables exportées

## Présentation

Les variables exportées sont des variables disponibles pour écrire des règles d'accès et des en-têtes. Elles sont extraites de la base de données des utilisateurs par le module utilisateurs.

Pour créer une variable, il faut simplement associer des attributs utilisateurs dans LL::NG en utilisant `Variables` » `Variables exportées`. Pour chaque variable, le premier champ est le nom qui servira dans les règles, macros ou en-têtes et le second est le nom du champ dans la base de données utilisateurs.

Exemples pour LDAP :

Nom de Variable | Attribut LDAP
--- | ---
uid | uid
numero | employeeNumber
nom | sn

On peut définir des variables exportées pour chaque module dans sa propre configuration. Les variables définies dans le `Variables exportées` principal seront utilisées dans chaque backend. Celle définies dans le nœud « variables exportées » du module ne e seront que pour celui-ci.

You can define environment variables in `Exported variables`, this allows one to populate user session with some environment values. Les variables d'environnement ne seront pas demandées à la base de données utilisateurs.

## Étendre les variables en utilisant les macros et groups

Les macros et les groupes sont calculées pendant le processus d'authentification par le portail :

- Les macros sont utilisées pour étendre (ou réécrire) les variables exportées. Une macro est stockée comme un attribut : elle peut contenir le résultat d'un calcul booléen ou n'importe quelle chaîne de caractères
- les groupes sont stockées en chaîne de caractères séparées par des espaces dans l'attribut spécial “groups” : il contient les noms des groupes dont la règle à retournée une valeur non nulle pour l'utilisateur courant
- On peut également définir des groupes dans `$hGroups` qui est une référence à une table de hashage de la forme :

    $hGroups = {
              'group3' => {
                            'description' => [
                                               'Service 3',
                                               'Service 3 TEST'
                                             ],
                            'cn' => [
                                      'group3'
                                    ],
                            'name' => 'group3'
                          },
              'admin' => {
                           'name' => 'admin'
                         }
            }

Exemples de macros:

    # macro booléenne
    isAdmin -> $uid eq 'foo' or $uid eq 'bar'
    # autre macro
    displayName -> $givenName." ".$surName

    # Utiliser une macro booléenne dans une règle
    ^/admin -> $isAdmin
    # Utiliser une macro chaîne dans un en-tête HTTP
    Display-Name -> $displayName

Exemples de groupes:

    # group
    admin -> $uid eq 'foo' or $uid eq 'bar'

    # Use a group in a rule
    ^/admin -> $groups =~ /\badmin\b/

    # Or with hGroups
    ^/admin -> defined $hGroups->{'admin'}

Noter que les groupes sont calculés après les macros, donc une règle de groupe peut utiliser une valeur issue d'une macro.
Les macros et groupes sont calculés dans l'ordre alpha-numerique, c'est à dire dans l'ordre d'affichage dans le manager. Par exemple, la macro “macro1” sear calculée avant la macro “macro2” : donc l'expression de macro2 peut utiliser la valeur $macro1. De même pour les groupes : une règle de groupe peut en utiliser une autre calculée précédemment.