/
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

  • En lien avec le rowaccess

    • Avoir un rowaccess sur la table liée à l’entité va filtrer directement la liste comme la syntaxe {{TABLE(<nom_de_table>, <alias_de_table>)}}

    • Avoir une colonne avec la propriété Data.ApplyRestrictions(.RowAccessDepth)
      Automatiquement à true avec une Constraints required.
      Exemple 1
      Dans le schema customeraddress on ajoute pour la colonne customer_ID

      "ApplyRestrictions" = true

      Cela se traduire : j’ai accès aux adresses des tiers dont j’ai le droit d’accès avec rowaccess.
      Exemple 2
      En plus de l’exemple précédent, dans le schema intervention on ajoute pour la colonne customeraddress_ID

      ”ApplyRestrictions” = true

      Cela se traduit : j’ai accès aux interventions dont le site (l’adresse) est accessible dont le tiers est accessible.
      Attention : ApplyRestrictions se base uniquement sur le schema dont le nom correspond à la table.

  • Sans rowaccess

 

Related content