Sdílet prostřednictvím


Vývoj rozšíření pro veřejné projekty

Služby Azure DevOps

Azure DevOps Services podporuje privátní i veřejné projekty. Soukromé projekty omezují přístup k ověřeným uživatelům s explicitními oprávněními. Veřejné projekty umožňují uživatelům, kteří nejsou členy, zobrazit obsah projektu ve stavu jen pro čtení.

Uživatel, který není členem, může být:

  • Anonymní: Neověřováno ve službě Azure DevOps Services
  • Veřejné: Ověřeno ve službě Azure DevOps Services, ale ne v rámci organizace

Uživatelé, kteří nejsou členy, vidí stejná zobrazení jako ověření uživatelé, ale Azure DevOps skryje nebo zakáže neveřejné funkce, jako jsou nastavení, akce a operace fronty sestavení.

Důležité

Pouze organizace s povolenou zásadou Povolit veřejný projekt můžou vytvářet projekty nebo měnit viditelnost projektu na veřejný. Zásady už nejsou dostupné pro organizace, které ji ještě nepoužívají. Microsoft doporučuje používat GitHub pro všechny potřeby vašeho veřejného projektu.

Rozhodněte se, jestli se má rozšíření zobrazovat uživatelům, kteří nejsou členy.

Jako vývojář rozšíření můžete zpřístupnit všechna rozšíření nebo jeho část uživatelům, kteří nejsou členy. Tito uživatelé můžou vaše rozšíření používat jenom z veřejných projektů. Pokud se rozhodnete rozšíření nečlenům zpřístupnit, nepotřebujete žádné změny a rozhodnutí nemá žádný vliv na členy, kteří vaše rozšíření používají ve veřejných projektech.

Pomocí tohoto kontrolního seznamu se můžete rozhodnout, jestli chcete rozšíření zpřístupnit uživatelům, kteří nejsou členy:

  • Vaše rozšíření představuje data, která jsou relevantní pro uživatele, kteří nejsou členy.
  • Vaše rozšíření přispívá schopností na úrovni projektu
  • Vaše rozšíření přispívá k oblastem produktů, ke kterým mají přístup uživatelé, kteří nejsou členy.
  • Vaše rozšíření se ani nerozšiřuje, ani nespoléhá na funkce, ke kterým nemají přístup uživatelé, kteří nejsou členy, jako je datová služba rozšíření nebo určitá rozhraní REST API služby Azure DevOps. Další informace najdete v části Omezení .

Konfigurace viditelnosti příspěvku

Azure DevOps ve výchozím nastavení zobrazuje příspěvky jenom členům organizace. Pokud chcete uživatelům, kteří nejsou členy, dát přehled o příspěvku, nastavte restrictedTo atribut pro tento příspěvek. Hodnota je pole řetězců, které uvádí, které typy uživatelů by měly vidět příspěvek. Mezi možné hodnoty patří:

  • member: Ověřený uživatel, který je členem organizace
  • public: Ověřený uživatel, který není členem organizace
  • anonymous: Neověřený uživatel

Zpřístupnění centra anonymním, veřejným a členským uživatelům

{
    "contributions": [
        {
            "id": "my-hub",
            "type": "ms.vss-web.hub",
            "targets": [
                "ms.vss-code-web.code-hub-group"
            ],
            "restrictedTo": [
                "member",
                "public",
                "anonymous"
            ],
            "properties": {
                ...            
            }
        }
    ]
}

Výchozí viditelnost všech příspěvků v rozšíření můžete nastavit také nastavením restrictedTo atributu v kořenovém adresáři manifestu rozšíření. Toto výchozí nastavení pak můžete přepsat u jednotlivých příspěvků.

Každý příspěvek, s výjimkou jednoho, viditelný všem uživatelům.

{
    "id:": "my-extension",
    "name": "My Extension",
    "version": "1.0.0",
    ...
    "restrictedTo": [
           "anonymous",
           "public",
           "member"
    ],
    "contributions": [
        {
            "id": "my-member-only-widget",
            "type": "ms.vss-dashboards-web.widget",
            "restrictedTo": [
                "member"
            ],
            "properties": {
                ...
            }
        },
        {
            "id": "my-hub",
            "type": "ms.vss-web.hub",
            "targets": [
                "ms.vss-code-web.code-hub-group"
            ],
            "properties": {  
                ...              
            }
        },
        {
            "id": "my-second-hub",
            "type": "ms.vss-web.hub",
            "targets": [
                "ms.vss-work-web.work-hub-group"
            ],
            "properties": {  
                ...              
            }
        }            
    ]
}

Vysvětlení omezení pro uživatele, kteří nejsou členy

Pokud chcete zpřístupnit některé nebo všechny aspekty příspěvku veřejným uživatelům, zvažte následující omezení.

Omezení metod SDK VSS

Základní skript sady SDK, VSS.SDK.js, umožňuje webovým rozšířením komunikovat s nadřazeným rámcem, aby prováděla operace, jako je inicializace komunikace a získávání aktuálních informací o kontextu uživatele. Následující metody sady SDK sady VSS nepodporují uživatele, kteří nejsou členy:

  • VSS.getAccessToken()
  • VSS.getAppToken()

Omezení služeb pro rozšiřování dat

Vzhledem k tomu, že datová služba rozšíření spravuje data, která nejsou vymezená nebo zabezpečená pro projekt, nemůžou uživatelé, kteří nejsou členy, číst ani zapisovat žádný typ dat rozšíření.

Zpracování chyb přístupu k datům

Pokud datová služba nemůže získat přístup k datům z důvodu omezení oprávnění volajícího uživatele, příslib vrácený z volání getValue se odmítne. Chyba předaná funkci reject má vlastnost názvu, která vám pomůže pochopit, proč se volání nepodařilo číst nebo zapisovat data.

VSS.getService(VSS.ServiceIds.ExtensionData).then(function(dataService) {
    dataService.getValue("someKey").then(function(value) {
         // Process the value
    }, function(error) {
       if (error.name === "AccessCheckException") {
           alert(error.message);
       }
    });
});

Přístup k rozhraní REST API

Azure DevOps Services poskytuje omezenou sadu rozhraní REST API pro uživatele, kteří nejsou členy. Tato rozhraní API zahrnují většinu rozhraní API na úrovni organizace a projektů pro funkce, ke kterým mají uživatelé, kteří nejsou členy, obecně přístup. Tyto informace zvažte, když se rozhodnete, jestli chcete rozšíření zpřístupnit uživatelům, kteří nejsou členy.

Doporučujeme používat rozhraní API verze 5.0 a novější, protože Azure DevOps zpřístupňuje určitá rozhraní API uživatelům, kteří nejsou členy, pouze od verze 5.0.

Odkazy na identity

Většina rozhraní REST API služby Azure DevOps Services používá k reprezentaci uživatele nebo skupiny společnou smlouvu. Pokud chcete chránit informace o členech, jako jsou e-mailové adresy, Azure DevOps vynechá určitá pole, například uniqueName, když anonymní nebo veřejný uživatel vyvolá rozhraní REST API.

Zkontrolujte oprávnění uživatele

Pomocí oprávnění se můžete rozhodnout, zda ve svém rozšíření zobrazit nebo aktivovat určitou funkci. Pomocí rozhraní REST API zabezpečení z kódu webového rozšíření zkontrolujte, jestli má aktuální uživatel v Azure DevOps Services oprávnění k dokončení úlohy. Tento přístup brání uživatelům v tom, aby si mysleli, že k něčemu mají oprávnění, jenom aby zjistili, že ne.

Zkontrolujte, jestli má uživatel oprávnění k zařazení sestavení do fronty.

Tento příklad ukazuje, jak zkontrolovat pomocí REST klienta zabezpečení, jestli má uživatel oprávnění k zařazování sestavení do fronty v aktuálním projektu. Ve výchozím nastavení nemají uživatelé, kteří nejsou členy, toto oprávnění.

VSS.require(["VSS/Service", "VSS/security/RestClient"], function(VSS_Service, Security_RestClient) {
   var client = VSS_Service.getCollectionClient(Security_RestClient.SecurityHttpClient3);
 
   var securityToken = VSS.getWebContext().project.id;
 
   client.hasPermissionsBatch({
    evaluations: [
       {
           "securityNamespaceId": "33344D9C-FC72-4d6f-ABA5-FA317101A7E9",
           "token": securityToken,
           "permissions": 128 /* queue builds */
       }
    ],
    alwaysAllowAdministrators: true
}
).then(function(response) {
     console.log("Can user queue builds in this project? " + response.evaluations[0].value);
  });
});

Zvažte požadavky widgetu řídicího panelu

Stejně jako jiné typy příspěvků řídí vlastnost příspěvku restrictedTo viditelnost příspěvků widgetu řídicího panelu. Pokud například chcete, aby byl widget viditelný pro uživatele bez člena i pro členy:

{
  "contributions": [
    {
      "id": "HelloWorldWidget",
      "type": "ms.vss-dashboards-web.widget",
      "targets": [
        "ms.vss-dashboards-web.widget-catalog"
      ],
      "restrictedTo": [
        "member",
        "public",
        "anonymous"
      ],
      "properties": {
          ...
      }
    }
  ]
}

Konfigurace nastavení widgetu

Při řízení viditelnosti widgetů pro uživatele, kteří nejsou členy, poskytuje architektura řídicího panelu také volitelný, opensourcový mechanismus úložiště pro nastavení widgetu. Dva mechanismy označují, jestli jsou nastavení widgetu k dispozici pro uživatele, kteří nejsou členy ve veřejných projektech.

Widget s konfigurovatelnými nastaveními, která jsou viditelná pro uživatele, kteří nejsou členy, musí dodržovat jeden z následujících vzorů. Nesloužení těchto vzorů blokuje zobrazení widgetu těmto uživatelům.

Model 1: Widget deklaruje, že instance ukládají pouze nastavení specifická pro projekt.

Nastavte vlastnost příspěvku widgetu canStoreCrossProjectSettings na false hodnotu, která indikuje, že nastavení widgetu je specifické pro projekt.

{
    "id:": "HelloWorldWidget",
    "type": "ms.vss-dashboards-web.widget",
    ...
    "properties": {
        "canStoreCrossProjectSettings": false
    }
}

Model 2: Instance widgetu deklaruje nastavení specifické pro projekt

Jednotlivé instance widgetů můžou také znamenat, že jejich nastavení jsou specifická pro projekty a jsou k dispozici pro uživatele, kteří nejsou členy. Při ukládání nastavení by měl widget nastavit hasCrossProjectSettings na false v JSON řetězci ve formátu string.

{
    "hasCrossProjectSettings": false,
    "hypotheticalWidgetOption": true,
    "backlogLevel": "Stories"
}

Zvažte požadavky na sestavení a vydání.

Pokud vaše rozšíření přispívá k úloze sestavení nebo úloze vydání, nepotřebujete změny, abyste tuto úlohu mohli použít v kanálu veřejného projektu.

Zohlednit aspekty sledování pracovních úkolů

Rozšíření nefungují pro uživatele, kteří nejsou členy, v kontextu veřejného projektu beze změn. To zahrnuje formulář pracovní položky, další prostředí pracovních položek a interakci s rozhraními REST API pro sledování pracovních položek.

Omezení formuláře pracovní položky

Azure DevOps nefunguje při aktualizacích nebo mazání pracovních položek pro uživatele, kteří nejsou členy.

Zpracování identit

V rozhraní REST API služby Azure DevOps Services verze 5.0 a novější vrátí služba identity jako IdentityRef objekty místo řetězců. Jak je popsáno výše, Azure DevOps nevrací určitá pole, například uniqueName, v těchto objektech, pokud uživatel, který není členem, volá rozhraní API.

Omezení rozsahu rozhraní API

Rozšíření můžou vyvolat pouze rozhraní REST API s oborem projektu, pokud aktuální uživatel není členem organizace. Azure DevOps odmítne všechna volání rozhraní REST API, která nejsou vymezena na projekt.

Omezení dotazů

Uživatelé, kteří nejsou členy, čelí následujícím omezením souvisejícím s dotazy na pracovní položky:

  • Uživatelé, kteří nejsou členy, můžou spouštět známé dotazy pouze podle ID nebo cesty.
  • Dotazy musí být vymezeny na aktuální projekt. Azure DevOps vylučuje všechny pracovní položky, které nepatří do aktuálního projektu.
  • Uživatelé, kteří nejsou členy, nemůžou vytvářet nové dotazy nebo spouštět dotazy WIQL