access_grant

用量

access_grant: access_grant_name {
  user_attribute: user_attribute_name
  allowed_values: [ "value_1", "value_2" , ... ]
}
階層
access_grant
預設值

接受
使用者屬性名稱 (含 user_attribute 子參數) 和使用者屬性值清單 (含 allowed_values 子參數)

定義

存取權授予是在模型檔案中定義的 LookML 結構,可控管其他 LookML 結構的存取權,特別是「探索」、彙整、檢視區塊和欄位。access_grant 參數會定義存取權授權。

access_grant 會使用 user_attribute 子參數取得使用者屬性名稱,並使用 allowed_values 子參數取得使用者屬性的可接受值清單。只有在指定使用者屬性中獲派允許值的使用者,才能存取需要存取權授予的結構。

定義完成後,您可以在「探索」、「彙整」、「檢視」或「欄位」層級使用 required_access_grants 參數,要求授予存取權才能存取這些結構。

舉例來說,下列 LookML 會建立名為 can_view_financial_data 的存取權授權,該授權是以 department 使用者屬性為依據。只有在 department 使用者屬性中獲派 "finance""executive" 值的使用者,才能獲得 can_view_financial_data 存取權:

access_grant: can_view_financial_data {
  user_attribute: department
  allowed_values: [ "finance", "executive" ]
}

然後使用 required_access_grants 參數,將 can_view_financial_data 存取權授予與 LookML 結構建立關聯:

dimension: financial_data_field
  ...
  required_access_grants: [can_view_financial_data]
}

在本例中,只有具備適當使用者屬性值的存取權授予對象,才會看到 financial_data_field 維度。can_view_financial_data

您可以在模型中定義多個存取權授權,並使用 required_access_grants 參數將多個存取權授權指派給 LookML 結構。在這種情況下,使用者必須有權存取所有指定的存取權授權,才能存取 LookML 結構。

舉例來說,下列 LookML 定義了兩項不同的存取權授權:

access_grant: can_view_financial_data {
  user_attribute: department
  allowed_values: [ "finance", "executive" ]
}

access_grant: can_view_payroll_data {
  user_attribute: view_payroll
  allowed_values: [ "yes" ]
}

接著,在檢視檔案中,required_access_grants 參數會指定兩項存取權授權:

view: payroll {
  ...
  required_access_grants: [can_view_financial_data, can_view_payroll_data]
}

在這種情況下,只有department使用者屬性同時具有 "finance""executive" 值,且view_payroll使用者屬性具有 "yes" 值的使用者,才能存取該資料檢視。

範例

定義存取權授權,要求使用者在 department 使用者屬性中具有 "product_management""engineering" 值,才能存取 engineering 存取權授權:

access_grant: engineering {
  user_attribute: department
  allowed_values: [ "product_management", "engineering" ]
}

您也可以使用採用數值或日期/時間資料的使用者屬性,定義存取權授權。如要這麼做,請將允許的值放在雙引號中,就像處理字串一樣。舉例來說,下列存取權授權會參照id使用者屬性,該屬性的資料類型數字。只有 id 值為 1、2、3、4 或 5 的使用者才能獲得存取權:

access_grant: user_id {
  user_attribute: id
  allowed_values: ["1", "2", "3", "4", "5"]
}

以下範例參照使用者屬性 start_date,其資料類型為「日期/時間」。只有使用者屬性值為 2020-01-01 的使用者才能獲得存取權:

access_grant: start_date {
  user_attribute: start_date
  allowed_values: ["2020-01-01"]
}

注意事項

授予存取權時,不允許使用者編輯使用者屬性

存取權授予作業無法接受「使用者存取權」層級為「編輯」的使用者屬性。使用者可以在帳戶頁面中,查看及編輯「使用者存取權」層級為「編輯」的使用者屬性值。為確保安全,只有「使用者存取權」層級為「無」或「檢視」的使用者屬性,才能搭配 access_grant 使用。

allowed_values 中列出的值必須與使用者屬性值完全相符

access_grant 適用於具有「字串篩選器 (進階)」、「數字篩選器 (進階)」或「日期/時間篩選器 (進階)」資料類型的使用者屬性。但如要授予存取權,allowed_values 參數中列出的值必須與使用者屬性中的值完全相符。

舉例來說,如果您建立名為 numeric_range 的使用者屬性,並將資料類型設為「數字篩選器 (進階)」,就可以使用 Looker 篩選器運算式輸入數字範圍,例如 [1, 20]。在該範例中,使用者屬性中的 Looker 篩選條件運算式會傳回介於 1 到 20 之間的數字範圍 (含 1 和 20)。不過,由於 access_grant 必須完全相符,因此使用 allowed_values: ["10"] 參數無法授予存取權。如要授予存取權,您必須使用 allowed_values: ["[1, 20]"]

如果使用者屬性有多個值,也會發生這種情況。舉例來說,如果使用者屬性的資料類型為「數字篩選器 (進階)」,且值為 1, 3, 5,則會比對參數為 allowed_values: ["1, 3, 5"] 的存取權授權。同樣地,如果存取權授權包含 allowed_values: ["1"] 參數,使用者屬性中有多個值的使用者就無法獲得存取權。如果存取權授予要求包含 allowed_values: ["1", "3", "5"] 參數,也不會授予存取權給這位使用者,因為 allowed_values: [] 參數雖然可以接受多個值,但 allowed_values: ["1", "3", "5"] 參數中的三個值都不完全符合使用者屬性值 1, 3, 5。在本例中,使用者屬性值為 135 的使用者獲得存取權,因為這些值都符合 allowed_values: ["1", "3", "5"] 參數中的其中一個選項。

同樣地,access_grant 必須與資料類型為「字串篩選器 (進階)」的使用者屬性完全相符。與一般的 Looker 篩選運算式不同,使用 allowed_values: [ "Ca%" ] 參數不會將使用者屬性與 CanadaCalifornia 值相符。只有使用者屬性值完全符合 Ca%,系統才會比對成功並授予存取權。

未獲授權的使用者會根據 LookML 結構,體驗不同的行為

如果使用者沒有存取授權,系統會根據他們嘗試存取的 LookML 結構,提供不同的體驗。如要瞭解如何限制存取這些結構,請參閱「探索」、「加入」、「查看」或「欄位」層級的 required_access_grants 說明文件頁面。

系統會將多個層級的存取權授權加總

如果巢狀結構中包含授予的存取權,這些存取權會累加。舉例來說,您可以為檢視畫面建立 required_access_grants,並在檢視畫面中為欄位建立 required_access_grants。使用者必須同時擁有欄位「和」檢視畫面的存取權,才能看到欄位。同樣地,如果是聯結,如果您為聯結中的檢視區塊建立 required_access_grants,並為這兩個檢視區塊的聯結建立 required_access_grants,使用者必須同時獲得這兩個檢視區塊和聯結的存取權,才能查看聯結的檢視區塊。

存取參照受限結構體的結構體

使用者可以存取含有 LookML 物件的 Look 或資訊主頁,即使他們沒有存取權也一樣。在這些情況下,系統會顯示 Look 或資訊主頁,彷彿這些 LookML 物件已從模型中移除。

假設我們有「探索 A」,其中包含聯結 A、檢視 A 和欄位 A。接著,我們對「探索 A」設下存取限制。如預期,彙整 A、檢視 A 和欄位 A 會繼承該限制,但僅限於使用者與探索 A 互動時。如果聯結 A、檢視區塊 A 或欄位 A 用於其他探索 B,則不一定會受到任何存取限制。因此,如果您打算重複使用 LookML 元素,建議您盡可能在最低層級套用存取限制。