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]
}

在此示例中,只有具有适当用户属性值(针对 can_view_financial_data 访问权限授予)的用户才会看到 financial_data_field 维度。

您可以在一个模型中定义多个访问权限授予,也可以使用 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 元素,建议您尽可能在最低级别应用访问权限限制。