Partage¶
Partage¶
La solution de partage vous permet de partager la plupart des objets du système avec des groupes d'utilisateurs spécifiques et de définir si les objets doivent être accessibles au public ou privés. Pour obtenir et définir le statut de partage des objets, vous pouvez interagir avec la ressource de partage.
/api/33/sharing
Obtenir le statut de partage¶
Pour demander le statut de partage d'un objet, faites une requête GET à :
/api/33/sharing?type=dataElement&id=fbfJHSPpUQD
La réponse se présente comme suit.
{
"meta": {
"autoriserl'accèspublic": vrai,
"autoriserl'accèsexterne": faux
},
"objet": {
"id": "fbfJHSPpUQD",
"nom": "CPN 1ère visite",
"accèspublic": "rw------",
"accèsexterne": faux,
"utilisateur": {},
"accès au groupe d'utilisateurs": [
{
"id": "hj0nnsVsPLU",
"accès": "rw------"
},
{
"id": "qMjBflJMOfB",
"accès": "r-------"
}
]
}
}
Définir le statut de partage¶
Vous pouvez définir le statut de partage d'un objet en utilisant la même URL avec une requête POST, où la charge utile au format JSON ressemble à ceci :
{
"objet": {
"accèspublic": "rw------",
"accèsexterne": faux,
"utilisateur": {},
"accès au groupe d'utilisateurs": [
{
"id": "hj0nnsVsPLU",
"accès": "rw------"
},
{
"id": "qMjBflJMOfB",
"accès": "r-------"
}
]
}
}
Dans cet exemple, la charge utile définit l'objet comme ayant un accès public en lecture et en modification, aucun accès externe (sans connexion), un accès en lecture et en modification à un groupe d'utilisateurs et un accès en lecture uniquement à un autre groupe d'utilisateurs. Vous pouvez soumettre ceci à la ressource de partage en utilisant curl :
curl -d @sharing.json "localhost/api/33/sharing?type=dataElement&id=fbfJHSPpUQD"
-H "Content-Type:application/json" -u admin:district
Il est possible de créer des combinaisons de partage surprenantes. Par exemple, si
accèsexterneest défini àvraimais queaccèspublicest défini à--------, les utilisateurs n'auront accès à l'objet que lorsqu'ils seront déconnectés.
Nouvel objet de partage¶
Depuis la version 2.36, une nouvelle propriété partage a été introduite afin de remplacer les anciennes propriétés de partage accès utilisateur, accès groupe utilisateur, accès public, accès externe dans toutes les classes de métadonnées pour lesquelles le partage est activé. Cet objet Partage est sauvegardé en tant que colonne JSONB dans la base de données. Cependant, afin de rendre le système compatible avec les anciennes versions, les anciens objets de partage continuent de fonctionner normalement, à la fois pour l'importation et l'exportation. Dans le backend, les données de partage seront sauvegardées dans la nouvelle colonne JSONb Partage au lieu des anciennes tables *Accès.
Le format est le suivant :
{
"nom": "CPN 1ère visite",
"accès public": "rw------",
"accès externe": faux,
"accès aux groupes d'utilisateurs": [
{
"accès": "r-r-----",
"groupe d'utilisateur Uid": "Rg8wusV7QYi",
"nom d'affichage": "Coordinateurs du programme VIH",
"id": "Rg8wusV7QYi"
}
],
"accès utilisateur": [],
"utilisateur": {
"nom d'affichage": "Tom Wakiki",
"nom": "Tom Wakiki",
"id": "GOLswS44mh8",
"Nom d'utilisateur": "système"
},
"partage": {
"propriétaire": "GOLswS44mh8",
"externe": faux,
"utilisateurs": {},
"groupes d'utilisateurs": {
"Rg8wusV7QYi": {
"accès": "r-r-----",
"id": "Rg8wusV7QYi"
}
},
"public": "rw------"
}
}
Définir le statut de partage en utilisant la nouvelle Api JSON Patch¶
Vous pouvez utiliser JSON Patch API pour mettre à jour le partage d'un objet en envoyant une requête PATCH à ce point de terminaison avec l'en-tête Type de contenu : application/json-patch+json
api/dataElements/fbfJHSPpUQD
partage. La charge utile au format JSON ressemble à ceci : [
{
"op": "remplacer",
"chemin d'accès": "/partage/utilisateurs",
"valeur": {
"NOOF56dveaZ": {
"accès": "rw------",
"id": "NOOF56dveaZ"
},
"Kh68cDMwZsg": {
"accès": "rw------",
"id": "Kh68cDMwZsg"
}
}
}
]
partage d'un objet comme suit [
{
"op": "ajouter",
"chemin d'accès": "/partage/utilisateurs",
"valeur": {
"NOOF56dveaZ": {
"accès": "rw------",
"id": "NOOF56dveaZ"
},
"Kh68cDMwZsg": {
"accès": "rw------",
"id": "Kh68cDMwZsg"
}
}
}
]
partage comme ceci [
{
"op": "ajouter",
"chemin d'accès": "/partage/utilisateurs/NOOF56dveaZ",
"valeur": {
"accès": "rw------",
"id": "NOOF56dveaZ"
}
}
]
partage comme suit [
{
"op": "supprimer",
"chemin d'accès": "/partage/utilisateurs/N3PZBUlN8vq"
}
]
Partage en cascade du tableau de bord¶
Aperçu¶
- La fonction
partage en cascadeest disponible pour les tableaux de bord. Cette fonction copie lesAccès utilisateuretAccès groupe d'utilisateursd'un tableau de bord vers tous les objets de sesÉléments de tableau de bord, y compris uneCarte, unRapport d'événement, unGraphique d'événement, uneVisualisation. - Cette fonction ne copie pas l'accès
MODIFIER_LES METADONNEES. Lesaccès d'utilisateuretaccès de groupe d'utilisateurcopiés recevront uniquement la permissionLECTURE_DES METADONNEES. - Le paramètre
Accèspublicdu tableau de bord n'est pas copié. - Si un objet cible a l'option
Accès publicactivée, alors il sera ignoré et ne recevra pas lesAccès utilisateurou lesAccès groupe d'utilisateursdu tableau de bord. - L'utilisateur actuel doit avoir la permission de partage
LECTURE_DE METADONNEESsur tous les objets cibles. Si ce n'est pas le cas, l'erreurE5001est déclenchée. - L'utilisateur actuel doit avoir la permission de partage
MODIFIER_LES METADONNEESpour mettre à jour n'importe quel objet cible. Si un objet cible doit être mis à jour et que l'utilisateur n'a pas cette permission, l'erreurE3001est déclenchée.
Exemple de cas d'utilisation¶
- Le tableau de bord A est partagé avec l'utilisateur A avec la permission
METADONNEES_LECTURE_MODIFIER. - Le tableau de bord A a une visualisation A qui a un élément de données A.
- La Visualisation A, l'Elément de données A ont un
accès publicdésactivé et ne sont pas partagés avec l'utilisateur A. - Après avoir exécuté le partage en cascade pour le tableau de Bord A, l'utilisateur A aura un accès
LECTURE_DE METADONNEESà la Visualisation A et à l'Élément de Données A.
Point de terminaison de l'API¶
- Envoyer une requête
POSTau point de terminaisonapi/dashboards/cascadeSharing/{dashboardUID}
Paramètres de l'API¶
| Nom | Par défaut | Description |
|---|---|---|
| dryRun | faux | Si ce paramètre est fixé à vrai, la fonction de partage en cascade sera exécutée sans mettre à jour aucun objet. La réponse comprendra les erreurs éventuelles et tous les objets qui seront mis à jour. Cela permet à l'utilisateur de connaître le résultat avant d'exécuter la fonction de partage en cascade. |
| atomic | faux | Si ce paramètre est fixé à vrai, alors la fonction de partage en cascade s'arrêtera et ne mettra à jour aucun objet s'il y a une erreur. Sinon, si cette valeur est fausse, la fonction essaiera de procéder avec le mode du best effort (meilleur effort). |
Exemple de réponse :
{
"rapports d'erreur": [
{
"message": "Pas d'objet correspondant à la référence. L'identificateur était s46m5MS0hxu, et l'objet était l'élément de données .",
"mainKlass": "org.hisp.dhis.dataelement.DataElement",
"code d'erreur": "E5001",
"Propriétés de l'erreur": [
"s46m5MS0hxu",
"élément de données "
]
}
],
"countUpdatedDashBoardItems": 1,
"mettre à jour les objets": {
"élément de données ": [
{
"id": "YtbsuPPo010",
"nom": "Dose de rougeole administrée"
},
{
"id": "l6byfWFUGaP",
"nom": "Doses de fièvre jaune administrées"
}
]
}
}
Propriétés de la réponse :¶
Rapports d'erreurs: inclut toutes les erreurs survenues au cours du processus de partage en cascade.countUpdatedDashBoardItems: Nombred'éléments du tableau de bordqui seront ou ont été mis à jour, en fonction du modedryRun.updateObjects(Mise à jour des objets): Liste de tous les objets qui seront ou ont été mis à jour en fonction du modedryRun.
Patch API du partage en vrac¶
- L'API de partage en vrac vous permet d'appliquer des paramètres de partage à plusieurs objets de métadonnées. Cela signifie qu'il est possible d'ajouter ou de supprimer de nombreux utilisateurs et groupes d'utilisateurs à de nombreux objets en une seule opération API.
- Cette API ne doit pas prendre en charge la synchronisation des objets de métadonnées au fil du temps, mais la traiter comme une opération ponctuelle.
- L'API doit respecter le contrôle d'accès au partage, de sorte que l'utilisateur actuel ait accès à la modification du partage des objets en cours de mise à jour.
- Deux nouveaux points de terminaison api ont été introduits à partir de la version 2.38 pour permettre le partage en masse des mises à jour de correctifs, comme décrit ci-dessous.
- Veuillez noter que ces requêtes
PATCHdoivent utiliser l'en-têteContent-type:application/json-patch+json
Utilisation de /api/{object-type}/sharing avec une requête PATCH¶
- Ce point d'accès permet à l'utilisateur d'appliquer un ensemble de paramètres de partage à plusieurs objets de métadonnées d'un type d'objet.
- Notez que nous supportons toujours les requêtes JsonPatch pour un objet avec le point de terminaison
api/{object-type}/{uid}. Par exemple, vous pouvez toujours mettre à jour le partage d'un Élément de Données en envoyant une requête PATCH àapi/dataElements/cYeuwXTCPkU/sharing
Exemple:
curl -X PATCH -d @payload.json -H "Content-Type: application/json-patch+json" "https://play.dhis2.org/dev/api/dataElements/sharing"
Utiliser /api/metadata/sharing avec une requête PATCH¶
- Ce point de terminaison permet à l'utilisateur d'appliquer des paramètres de partage pour plusieurs types d'objets en une seule charge utile.
Exemple:
curl -X PATCH -d @payload.json -H "Content-Type: application/json-patch+json" "https://play.dhis2.org/dev/api/metadata/sharing"
Paramètres¶
- Les deux points de terminaison de l'api du patch ont le même paramètre :
| Nom | Par défaut | Description |
|---|---|---|
| atomic | faux | Si ce paramètre est fixé sur vrai, la fonction de traitement par lots s'arrête et ne met à jour aucun objet en cas d'erreur. Sinon, si ce paramètre est fixé sur faux, la fonction essaye de procéder en mode " best effort " (meilleur effort). |
Validation¶
- L'existence de tous les identifiants d'objets sera validée.
- L'utilisateur actuel doit avoir l'autorisation de lire/modifier les métadonnées pour mettre à jour les objets.
- Toutes les validations existantes du service d'importation de métadonnées seront également appliquées.
Réponse¶
- Le format de la réponse doit être le même que celui de l'api
/api/metadata.
Formats de charge utile¶
-
La charge utile pour un seul type d'objet utilisant
/api/{type objet}/partagese présente comme suit{ "dataSets":[ "cYeuwXTCPkU", "aYeuwXTCPkU" ], "patch":[ { "op":"add", "path":"/sharing/users/DXyJmlo9rge", "value":{ "access":"rw------", "id":"DXyJmlo9rge" } }, { "op":"remove", "path":"/sharing/users/N3PZBUlN8vq" } ] } -
La charge utile pour plusieurs types d'objets en une seule charge utile en utilisant
api/métadonnée/partage{ "dataElements": { "fbfJHSPpUQD": [ { "op": "replace", "path": "/sharing/users", "value": { "NOOF56dveaZ": { "access": "rw------", "id": "CotVI2NX0rI" }, "Kh68cDMwZsg": { "access": "rw------", "id": "DLjZWMsVsq2" } } } ] }, "dataSets": { "cYeuwXTCPkA": [ { "op": "remove", "path": "/sharing/users/N3PZBUlN8vq" } ], "cYeuwXTCPkU": [ { "op": "add", "path": "/sharing/users/DXyJmlo9rge", "value": { "access": "rw------", "id": "DXyJmlo9rge" } } ] }, "programs": { "GOLswS44mh8": [ { "op": "add", "path": "/sharing/userGroups", "value": { "NOOF56dveaZ": { "access": "rw------", "id": "NOOF56dveaZ" }, "Kh68cDMwZsg": { "access": "rw------", "id": "Kh68cDMwZsg" } } } ] } }