17.4.7 Descriptions des tables des droits documents et actions

17.4.7.1 Table docperm

Les droits des profils de documents sont enregistrés dans la table docperm.

Composition de la table docperm :

Colonne Type Définition
docid integer Identifiant du profil
userid integer Identifiant du compte (utilisateur, groupe ou rôle) ou attribut de document (table vgroup)
upacl integer Droits du compte pour le profil

La colonne upacl contient un masque binaire (int4 : 32bits) indiquant les droits.

31 ... 11 10 9 8 7 6 5 4 3 2 1 0
confidential unlock modacl viewacl modify / icreate open / create / execute send delete edit view

Les droits 11 à 31 peuvent être utilisés pour indiquer des droits spécifiques.

Extrait de la table docperm :

# SELECT docid, userid, upacl::bit(32) FROM docperm;
 docid | userid  |              upacl               
-------+---------+----------------------------------
  4947 |       2 | 00000000000000000000000000100010
 15743 |       4 | 00000000000000000000000110000100
 15749 |       2 | 00000000000000000000000000100010
 15749 |       4 | 00000000000000000000000110000100
 15773 |     178 | 11111111111111111111111111111110
  2100 |     178 | 11111111111111111111111111111110
 15750 |       2 | 00000000000000000000000000100010

Dans cet extrait, la première ligne montre que le compte 2 (groupe all), pour le profil 4967 (document rapport) a le droit de voir et d'exécuter la recherche.

Cette table ne permet pas de savoir directement si un utilisateur a tel ou tel droit sur un document car il faut aussi corréler le résultat au groupe d'appartenance et aux rôles affectés à l'utilisateur.

Pour connaître l'ensemble des documents que l'utilisateur 'john.doe' peut voir, il est possible d'utiliser la colonne views de la table doc ou docread.

SELECT docread.id, docread.title, users.memberof  
FROM docread, users 
WHERE docread.views && ( users.memberof || '{0}'::INT[] ) 
  AND users.login = 'john.doe';

Note : L'ajout du zéro dans la liste permet à la condition de récupérer aussi les documents sans profil. Les documents sans profil ont {0} dans la colonne views.

Pour connaître l'ensemble des documents que l'utilisateur 'john.doe' peut modifier, il faut s'appuyer sur le contrôle du droit edit (position 2, masque 0x04) et utiliser la fonction hasaprivilege(userMemberOf, Profid, AccessBinaryMask).

SELECT docread.id, docread.title, profid  
FROM docread, users 
WHERE hasaprivilege(users.memberof, docread.profid, 2<<1) 
  AND users.login = 'john.doe' ;

17.4.7.2 Table docpermext

La table docpermext indique les droits étendus. Ces droits sont utilisés lorsque la liste des droits est variable.

Les cycles de vies et les contrôles de vues utilisent les droits étendus.

Le nom des droits pour les cycles est le nom de la transition. Le nom des droits pour les contrôles de vue est l'identifiant de la vue.

Composition de la table docpermext :

Colonne Type Définition
docid integer Identifiant du profil (document cycle ou contrôle de vue)
userid integer Identifiant du compte (utilisateur, groupe ou rôle) ou attribut de document (table vgroup)
acl text Nom du droit

17.4.7.3 Table permission

La table permission indique les droits applicatifs posés. Ce sont ces droits qui sont utilisés pour vérifier l'accès à l'exécution d'une action.

Composition de la table permission :

Colonne Type Définition
id_user integer Identifiant du compte (utilisateur, groupe ou rôle) (table users)
id_application integer Identifiant de l'application (table application)
id_acl integer Identifiant de l'acl applicative (table acl)
computed boolean Cache valeur calculée - vrai si c'est un droit déduit

Des droits calculés (computed=true) sont enregistrés pour accélérer le calcul du droit lors des prochaines requêtes.

17.4.7.4 Table acl

La table acl contient la définition des droits utilisées par les applications.

Colonne Type Définition
id integer Identifiant de l'acl - issus de la séquence seq_id_acl
id_application integer Identifiant de l'application (table application)
name text Nom de l'acl
grant_level integer Obsolète
description text Texte descriptif du droit
group_default character(1) Indique si cette acl est posée par défaut sur le groupe all. Valeurs possibles : [Y|N].
Relations entre les tables mises en œuvre pour la vérification des droits d'accès

Figure 107. Relations entre les tables mises en œuvre pour la vérification des droits d'accès

×