访问权限授予

用量

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 会根据 department 用户属性创建名为 can_view_financial_data 的访问权限。只有分配到 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]
}

在这种情况下,只有用户的 "finance" 用户属性具有值 "finance" 或值 "executive",并且其 view_payroll 用户属性具有值 "yes" 的用户才能访问该视图。

示例

定义访问权限授权,要求用户在 department 用户属性中具有值 "product_management" 或值 "engineering" 才能获得 engineering 访问权限:

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

您还可以使用采用数字或日期/时间数据的用户属性来定义访问权限授予。为此,您必须将允许的值用英文双引号括起来,就像处理字符串时一样。例如,以下访问权限会引用 id 用户属性,其数据类型number。只有 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 参数中列出的值必须与用户属性中的值完全匹配。

例如,如果您使用数据类型 Number Filter(高级) 创建了一个名为 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 元素,我们建议您尽可能在最低级别应用访问限制。