Azure DevOps 服務
Azure DevOps Services 支援私人和公用專案。 私人專案將存取限制為具有明確權限的已驗證使用者。 公開專案允許非會員使用者以唯讀狀態查看專案內容。
非會員用戶可以是:
- 匿名:未向 Azure DevOps Services 驗證
- 公用:已向 Azure DevOps Services 驗證,但不是組織的成員
非成員使用者會看到與已認證使用者相同的視圖,但 Azure DevOps 會隱藏或停用非公開功能,如設定、動作和建置隊列操作。
這很重要
只有已啟用 「允許公用專案」原則 的組織才能建立專案,或將專案的可見度變更為公用。 尚未使用該政策的組織不再可以使用該政策。 Microsoft建議針對所有公用專案需求使用 GitHub 。
非成員的擴展可見性
作為擴充功能開發者,你可以將全部或部分擴充功能開放給非會員用戶。 這些使用者只能從公用專案中使用您的延伸模組。 如果您選擇不讓非會員用戶使用您的擴充功能,則不需要更改,且該決定不會影響在公開專案中使用您擴展的會員。
請參考這份清單來決定是否應該將你的延伸服務開放給非會員用戶:
- 您的擴充功能會呈現與非成員使用者相關的資料
- 您的延伸模組會在專案層級提供功能
- 您的延伸功能會貢獻非成員使用者可以存取的產品區域
- 你的擴充功能不會延伸或依賴非成員使用者無法存取的功能,例如擴充資料服務或某些 Azure DevOps Services REST API。 如需詳細資訊,請參閱 限制 一節。
設定貢獻可見度
根據預設,Azure DevOps 只會顯示對組織成員的貢獻。 要讓非會員使用者看到某項貢獻,請設定 restrictedTo 該貢獻的屬性。 值是字串陣列,列出哪些使用者類型應該看到貢獻。 可能的值包括:
-
member:已驗證的使用者,屬於組織成員 -
public:不是組織成員但已驗證的使用者 -
anonymous:未經身份驗證的使用者
集線器對所有使用者可見
{
"contributions": [
{
"id": "my-hub",
"type": "ms.vss-web.hub",
"targets": [
"ms.vss-code-web.code-hub-group"
],
"restrictedTo": [
"member",
"public",
"anonymous"
],
"properties": {
...
}
}
]
}
您也可以透過在延伸模組的清單根元素設定 restrictedTo 屬性來設定所有貢獻的預設可見度。 然後,您可以在個別貢獻上覆寫此預設值。
除了其中一個貢獻外,其他貢獻都可見。
{
"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": {
...
}
}
]
}
非會員限制
如果您想要將貢獻的部分或全部層面提供給公用使用者,請考慮下列限制。
VSS SDK 方法限制
核心SDK指令碼 VSS.SDK.js,可讓Web擴充功能與父框架通訊,以執行初始化通訊和取得目前使用者內容資訊等作業。 以下 VSS SDK 方法不支援非會員使用者:
VSS.getAccessToken()VSS.getAppToken()
延伸資料服務限制
由於 擴充資料服務 管理的資料未被專案範圍限制或保護,非成員使用者無法讀取或寫入任何類型的擴充資料。
處理資料存取錯誤
當資料服務因呼叫使用者的權限限制無法存取資料時,通話回 getValue 傳的承諾會被拒絕。 傳遞給拒絕函數的錯誤具有 name 屬性,可協助您了解呼叫讀取或寫入資料失敗的原因。
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);
}
});
});
REST API 存取
Azure DevOps Services 提供有限的 REST API 給非會員使用者。 這些 API 包含大多數組織層級及專案層級的功能 API,非會員用戶通常可存取。 在決定是否將延伸服務開放給非會員用戶時,請考慮這些資訊。
請使用 5.0 版本及更新的 API,因為 Azure DevOps 只從 5.0 版本開始,對非會員使用者開放某些 API。
身分參照
大部分的 Azure DevOps Services REST API 都會使用常見的「合約」來代表使用者或群組。 為了保護成員資訊,例如電子郵件地址,Azure DevOps 會省略某些欄位,例如 uniqueName,當匿名或公用使用者叫用 REST API 時。
檢查使用者權限
使用許可權來決定是否要在延伸模組中顯示或啟用功能。 使用 Web 延伸模組程式碼中的安全性 REST API,檢查目前的使用者是否具有 Azure DevOps Services 中的許可權來完成工作。 這種方法可以防止用戶認為他們有權執行某事,卻發現他們沒有。
檢查建置佇列權限
此範例示範如何使用安全性 REST 用戶端來檢查使用者是否具有在目前專案中將組建排入佇列的許可權。 預設情況下,非會員用戶沒有此權限。
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);
});
});
控制台小工具需求
就像其他類型的貢獻一樣,restrictedTo 貢獻屬性控制儀表板小組件的貢獻可見度。 例如,要讓一個小工具對非會員和會員使用者都可見:
{
"contributions": [
{
"id": "HelloWorldWidget",
"type": "ms.vss-dashboards-web.widget",
"targets": [
"ms.vss-dashboards-web.widget-catalog"
],
"restrictedTo": [
"member",
"public",
"anonymous"
],
"properties": {
...
}
}
]
}
設定小工具設定
當你控制非會員使用者對小工具的可見性時,儀表板框架還提供一個可選的、開放式的儲存機制來管理小工具設定。 有兩種機制表示在公開專案中,非會員使用者是否可以使用小工具設定。
具備可配置設定且對非會員使用者可見的小工具 ,必須 遵循以下其中一種模式。 不遵循這些模式會阻止小工具向這些使用者顯示。
專案專屬設定(擴充層級)
將小組件貢獻的內容 canStoreCrossProjectSettings 設為 false,表示小組件設定是專案特定的。
{
"id:": "HelloWorldWidget",
"type": "ms.vss-dashboards-web.widget",
...
"properties": {
"canStoreCrossProjectSettings": false
}
}
專案專屬設定(實例層級)
個別小工具實例也可能表示其設定為專案專屬,且非成員使用者可使用。 當你儲存設定時,小工具應將 hasCrossProjectSettings 設置為 false 中的 JSON 串化字串:
{
"hasCrossProjectSettings": false,
"hypotheticalWidgetOption": true,
"backlogLevel": "Stories"
}
建置與發布需求
如果您的擴充功能提供建置或發行作業,您不需要變更即可從公共專案的管線使用該作業。
工作專案追蹤考量
若沒有進行變更,擴充功能在公開專案中無法運作,包括工作項目表單、其他工作項目相關體驗,以及與工作項目追蹤 REST API 的互動。
工作項目表單限制
Azure DevOps 會拒絕所有非成員使用者的工作項目更新或刪除。
身分識別處理
在 Azure DevOps Services REST API 5.0 版和更新版本中,服務會將身分識別傳回為物件, IdentityRef 而不是字串。 如前所述,Azure DevOps 若為非成員使用者呼叫 API 時,將不會回傳某些欄位,例如 uniqueName。
API 範圍限制
當目前使用者不是組織成員時,延伸模組只能叫用專案範圍的 REST API。 Azure DevOps 會拒絕任何非專案範圍的 REST API 呼叫。
查詢限制
非會員用戶在工作項目查詢時面臨以下限制:
- 非成員使用者僅可依 ID 或路徑執行已知查詢。
- 查詢的範圍必須限定為目前的專案。 Azure DevOps 排除任何不屬於目前專案的工作項目。
- 非會員使用者無法建立新查詢或執行 WIQL 查詢。