Přeskočit obsah
For the complete DHIS2 documentation index, see llms.txt.

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
Poznámka

It is possible to create surprising sharing combinations. For instance, if externalAccess is set to true but publicAccess is 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
Please note that this function only supports new 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"
      }
    }
  }
]
Můžete přidat uživatele do vlastnosti sharing objektu, jako je tento
[
  {
    "op": "add",
    "path": "/sharing/users",
    "value": {
      "NOOF56dveaZ": {
        "access": "rw------",
        "id": "NOOF56dveaZ"
      },
      "Kh68cDMwZsg": {
        "access": "rw------",
        "id": "Kh68cDMwZsg"
      }
    }
  }
]
Takto můžete přidat jednoho uživatele do sharing.
[
  {
    "op": "add",
    "path": "/sharing/users/NOOF56dveaZ",
    "value": {
      "access": "rw------",
      "id": "NOOF56dveaZ"
    }
  }
]
Tímto způsobem můžete odebrat jednoho uživatele ze sharing.
[
  { 
    "op": "remove", 
    "path": "/sharing/users/N3PZBUlN8vq"
  }
]

Cascade Sharing for Dashboard

Přehled

  • cascadeSharing is available for Dashboards. This function copies the userAccesses and userGroupAccesses of a Dashboard to all of the objects in its DashboardItems, including Map, EventReport, EventChart, Visualization.
  • This function will not copy METADATA_WRITE access. The copied UserAccess and UserGroupAccess will only receive the METADATA_READ permission.
  • Nastavení publicAccess ovládacího panelu se nezkopíruje.
  • Pokud má jakýkoli cílový objekt povolen publicAccess, bude přeskočen a nebude přijímat UserAccesses nebo UserGroupAccesses z ovládacího panelu.
  • Aktuální uživatel musí mít oprávnění ke sdílení METADATA_READ se všemi cílovými objekty. Pokud tak uživatel neučiní, je vyvolána chyba E5001.
  • 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 chyba E3001.

Sample use case

  • DashboardA is shared to userA with METADATA_READ_WRITE permission.
  • DashboardA má VisualizationA, která má DataElementA.
  • VisualizationA, DataElementA have publicAccess disabled and are not shared to userA.
  • Po provedení kaskádového sdílení pro DashboardA bude mít uživatelA přístup METADATA_READ k VisualizationA a DataElementA.

API endpoint

  • Send POST request to endpoint
    api/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čet DashboardItem bude nebo byl aktualizován v závislosti na režimu dryRun.
  • updateObjects: Seznam všech objektů, které budou nebo byly aktualizovány, závisí na režimu dryRun.

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 PATCH musí používat hlavičku Content-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 na api/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/metadata api.

Payload formats

  • Užitná zátěž pro jeden typ objektu pomocí /api/{object-type}/sharing vypadá 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"
              }
            }
          }
        ]
      }
    }