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]. |