Sdílení¶
Sdílení¶
Řešení pro sdílení umožňuje sdílet většinu objektů v systému s konkrétními skupinami uživatelů a definovat, zda mají být objekty veřejně přístupné nebo soukromé. Chcete-li získat a nastavit stav sdílení pro objekty, můžete komunikovat s prostředkem sdílení.
/api/33/sharing
Získejte stav sdílení¶
Chcete-li požádat o stav sdílení objektu, použijte požadavek GET k:
/api/33/sharing?type=dataElement&id=fbfJHSPpUQD
Odpověď vypadá jako níže.
{
"meta": {
"allowPublicAccess": true,
"allowExternalAccess": false
},
"object": {
"id": "fbfJHSPpUQD",
"name": "ANC 1st visit",
"publicAccess": "rw------",
"externalAccess": false,
"user": {},
"userGroupAccesses": [
{
"id": "hj0nnsVsPLU",
"access": "rw------"
},
{
"id": "qMjBflJMOfB",
"access": "r-------"
}
]
}
}
Nastavit stav sdílení¶
Stav sdílení můžete definovat pro objekt pomocí stejné adresy URL s požadavkem POST, kde datový obsah ve formátu JSON vypadá takto:
{
"object": {
"publicAccess": "rw------",
"externalAccess": false,
"user": {},
"userGroupAccesses": [
{
"id": "hj0nnsVsPLU",
"access": "rw------"
},
{
"id": "qMjBflJMOfB",
"access": "r-------"
}
]
}
}
V tomto příkladu datový obsah definuje objekt, který má veřejný přístup pro čtení a zápis, žádný externí přístup (bez přihlášení), přístup pro čtení a zápis do jedné skupiny uživatelů a přístup pouze pro čtení k jiné skupině uživatelů. Toto můžete odeslat do zdroje sdílení pomocí výrazu curl:
curl -d @sharing.json "localhost/api/33/sharing?type=dataElement&id=fbfJHSPpUQD"
-H "Content-Type:application/json" -u admin:district
It is possible to create surprising sharing combinations. For instance, if
externalAccessis set totruebutpublicAccessis set to--------, then users will have access to the object only when they are logged out.
New Sharing object¶
From 2.36 a new sharing property has been introduced in order to replace the old sharing properties userAccesses, userGroupAccesses, publicAccess, externalAccess in all metadata classes that have sharing enabled. This Sharing object is saved as a JSONB column in database. However, in order make it backward compatible the old sharing objects still work normally as before, for both import and export. In backend sharing data will be saved to new JSONb sharing column instead of the old *accesses tables.
Formát vypadá takto:
{
"name": "ANC 1st visit",
"publicAccess": "rw------",
"externalAccess": false,
"userGroupAccesses": [
{
"access": "r-r-----",
"userGroupUid": "Rg8wusV7QYi",
"displayName": "HIV Program Coordinators",
"id": "Rg8wusV7QYi"
}
],
"userAccesses": [],
"user": {
"displayName": "Tom Wakiki",
"name": "Tom Wakiki",
"id": "GOLswS44mh8",
"username": "system"
},
"sharing": {
"owner": "GOLswS44mh8",
"external": false,
"users": {},
"userGroups": {
"Rg8wusV7QYi": {
"access": "r-r-----",
"id": "Rg8wusV7QYi"
}
},
"public": "rw------"
}
}
Set sharing status using new JSON Patch Api¶
K aktualizaci sdílení objektu můžete použít JSON Patch API k aktualizaci sdílení objektu odesláním požadavku PATCH tomuto koncovému bodu se záhlavím Content-Type: application/json-patch+json
api/dataElements/fbfJHSPpUQD
sharing format. The payload in JSON format looks like this: [
{
"op": "replace",
"path": "/sharing/users",
"value": {
"NOOF56dveaZ": {
"access": "rw------",
"id": "NOOF56dveaZ"
},
"Kh68cDMwZsg": {
"access": "rw------",
"id": "Kh68cDMwZsg"
}
}
}
]
sharing objektu, jako je tento [
{
"op": "add",
"path": "/sharing/users",
"value": {
"NOOF56dveaZ": {
"access": "rw------",
"id": "NOOF56dveaZ"
},
"Kh68cDMwZsg": {
"access": "rw------",
"id": "Kh68cDMwZsg"
}
}
}
]
sharing. [
{
"op": "add",
"path": "/sharing/users/NOOF56dveaZ",
"value": {
"access": "rw------",
"id": "NOOF56dveaZ"
}
}
]
sharing. [
{
"op": "remove",
"path": "/sharing/users/N3PZBUlN8vq"
}
]
Cascade Sharing for Dashboard¶
Přehled¶
cascadeSharingis available for Dashboards. This function copies theuserAccessesanduserGroupAccessesof a Dashboard to all of the objects in itsDashboardItems, includingMap,EventReport,EventChart,Visualization.- This function will not copy
METADATA_WRITEaccess. The copiedUserAccessandUserGroupAccesswill only receive theMETADATA_READpermission. - Nastavení
publicAccessovládacího panelu se nezkopíruje. - Pokud má jakýkoli cílový objekt povolen
publicAccess, bude přeskočen a nebude přijímatUserAccessesneboUserGroupAccessesz ovládacího panelu. - Aktuální uživatel musí mít oprávnění ke sdílení
METADATA_READse všemi cílovými objekty. Pokud tak uživatel neučiní, je vyvolána chybaE5001. - Aktuální uživatel musí mít oprávnění ke sdílení
METADATA_WRITE, aby mohl aktualizovat jakékoli cílové objekty. Pokud by měl být cílový objekt aktualizován a uživatel toto oprávnění nemá, vyvolá se chybaE3001.
Sample use case¶
- DashboardA is shared to userA with
METADATA_READ_WRITEpermission. - DashboardA má VisualizationA, která má DataElementA.
- VisualizationA, DataElementA have
publicAccessdisabled and are not shared to userA. - Po provedení kaskádového sdílení pro DashboardA bude mít uživatelA přístup
METADATA_READk VisualizationA a DataElementA.
API endpoint¶
- Send
POSTrequest to endpointapi/dashboards/cascadeSharing/{dashboardUID}
API Parameters¶
| Název | Výchozí | Popis |
|---|---|---|
| dryRun | false | Pokud je toto nastaveno na true, funkce kaskádového sdílení bude pokračovat bez aktualizace jakýchkoli objektů. Odpověď bude obsahovat případné chyby a všechny objekty, které budou aktualizovány. To pomáhá uživateli znát výsledek před skutečným spuštěním funkce kaskádového sdílení. |
| atomic | false | Pokud je toto nastaveno na true, pak se funkce kaskádového sdílení zastaví a v případě chyby nebude aktualizovat žádné objekty. V opačném případě, pokud je to false, funkce se pokusí pokračovat v režimu maximálního úsilí. |
Sample response:
{
"errorReports": [
{
"message": "No matching object for reference. Identifier was s46m5MS0hxu, and object was DataElement.",
"mainKlass": "org.hisp.dhis.dataelement.DataElement",
"errorCode": "E5001",
"errorProperties": [
"s46m5MS0hxu",
"DataElement"
]
}
],
"countUpdatedDashBoardItems": 1,
"updateObjects": {
"dataElements": [
{
"id": "YtbsuPPo010",
"name": "Measles doses given"
},
{
"id": "l6byfWFUGaP",
"name": "Yellow Fever doses given"
}
]
}
}
Response properties:¶
errorReports: zahrnuje všechny chyby během procesu sdílení kaskády.countUpdatedDashBoardItems: PočetDashboardItembude nebo byl aktualizován v závislosti na režimudryRun.updateObjects: Seznam všech objektů, které budou nebo byly aktualizovány, závisí na režimudryRun.
Bulk Sharing patch API¶
- Rozhraní API pro hromadné sdílení umožňuje použít nastavení sdílení na více objektů metadat. To znamená možnost přidat nebo odebrat mnoho uživatelů a skupin uživatelů k mnoha objektům v jedné operaci API.
- Toto rozhraní API by nemělo podporovat synchronizaci objektů metadat v průběhu času a místo toho by to mělo považovat za jednorázovou operaci.
- Rozhraní API musí respektovat řízení přístupu ke sdílení v tom smyslu, že aktuální uživatel musí mít přístup k úpravě sdílení aktualizovaných objektů.
- Od verze 2.38 byly představeny dva nové koncové body rozhraní API, které umožňují aktualizaci oprav hromadného sdílení, jak je popsáno níže.
- Vezměte prosím na vědomí, že tyto požadavky
PATCHmusí používat hlavičkuContent-type:application/json-patch+json
Použití /api/{object-type}/sharing s požadavkem PATCH¶
- This endpoint allows user to apply one set of Sharing settings for multiple metadata objects of one object-type.
- Všimněte si, že stále podporujeme požadavek JsonPatch pro jeden objekt s koncovým bodem
api/{object-type}/{uid}. Například stále můžete aktualizovat sdílení DataElement odesláním požadavku PATCH naapi/dataElements/cYeuwXTCPkU/sharing
Example:
curl -X PATCH -d @payload.json -H "Content-Type: application/json-patch+json" "https://play.dhis2.org/dev/api/dataElements/sharing"
Using /api/metadata/sharing with PATCH request¶
- This endpoint allows user to apply Sharing settings for multiple object-types in one payload.
Příklad:
curl -X PATCH -d @payload.json -H "Content-Type: application/json-patch+json" "https://play.dhis2.org/dev/api/metadata/sharing"
Parameters¶
- Oba koncové body patch api mají stejný parametr:
| Název | Výchozí | Popis |
|---|---|---|
| atomic | false | Pokud je toto nastaveno na hodnotu true, pak se dávková funkce zastaví a nebude aktualizovat žádné objekty, pokud dojde k chybě V opačném případě, pokud je tato hodnota nepravda, funkce se pokusí pokračovat v režimu maximálního úsilí. |
Validation¶
- Existence všech ID objektů bude ověřena.
- Aktuální uživatel musí mít oprávnění ke čtení / zápisu metadat pro aktualizaci objektů.
- Budou také použita všechna stávající ověření ze služby importu metadat.
Odpověď¶
- Formát odpovědi by měl být stejný jako z
/api/metadataapi.
Payload formats¶
-
Užitná zátěž pro jeden typ objektu pomocí
/api/{object-type}/sharingvypadá takto{ "dataSets":[ "cYeuwXTCPkU", "aYeuwXTCPkU" ], "patch":[ { "op":"add", "path":"/sharing/users/DXyJmlo9rge", "value":{ "access":"rw------", "id":"DXyJmlo9rge" } }, { "op":"remove", "path":"/sharing/users/N3PZBUlN8vq" } ] } -
Užitná zátěž pro více typů objektů v jedné užitečné zátěži pomocí
api/metadata/sharing{ "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" } } } ] } }