/
Droit d’accès aux données

Droit d’accès aux données

Il faut filtrer l’accès aux données comme le fait les filtres de synchro du FO.
Il existe pour cela le mécanisme du rowaccess.
Ce mécanisme est déjà utilisé pour customer dans le BO.
Il permet de restreindre l’accès à 2 niveaux :

  • la fiche n’est pas accessible pour un ID donné

  • la ligne n’est pas accessible dans une liste

Note : toutefois la liste peut restreindre l’accès à une ligne d’une autre manière.

Calcul du rowaccess

A la fin du login, dans le script project.settings.projectsettings.scriptlibrary.ts, on exécute
await $rowAccess.setByDatasourceAsync(…) avec un datasource de type rowaccess, qui va lister l’ensemble des ID accessibles pour un device_ID (utilisateur connecté) pour une table.
Note : setByDatasourceAsync dispose d’un délai pour être applicable (pour éviter le recalcul lorsque l’utilisateur pratique beaucoup le F5).
Mais on peut le forcer avec le 2e paramètre à true. C’est ce que l’on fait par exemple lorsque l’on ajoute un nouveau tiers.

Si la table sw_sys_rowaccess ne contient aucune ligne pour un metatable_ID donné, tous les utilisateurs ont aucune restriction pour cette table.

Si la table sw_sys_rowaccess contient au moins une ligne pour un metatable_ID donné, un utilisateur (device_ID) qui n’a pas de ligne à aucun accès à cette table.

Pour information, la table sw_sys_rowaccessstatus contient le temps de calcul du rowaccess pour un utilisateur (device_ID) et une table (metatable_ID).

Comment utiliser le rowaccess

Dans un Crud

Rien est nécessaire, le système ne permet pas de charger un crud avec une table pour un ID qui n’est pas dans la table rowaccess.

Dans une Grid (requête SQL)

La syntaxe {{TABLE(<nom_de_table>, <alias_de_table>)}} permet d’introduire via le système un filtrage de la table principale ou de la table en jointure.

Dans une liste d’entité

Il y a plusieurs méthodes pour filtrer l’accès aux données