借助 Access Context Manager 的日期和时间限制功能,企业能够根据日期和时间来设置访问权限控制。
在评估零信任访问权限时,通常需要将用户限制为只能在特定日期和时间访问资源。例如,轮班工人只能在轮班期间访问公司资源,或用户仅能在一天的特定时间内获得临时访问权限。
如要应用时间和日期访问权限级别条件,请使用下表中列出的函数。函数的格式为 function(timezone)
。
您可以将 timezone
指定为 UTC,也就是相对于 UTC 的存在明确小时和分钟偏差的固定时区,也可以指定为较长的 timezone
名称,例如 Europe/Paris
、CET
或 US/Central
。如需完整列表,请参阅通用快捷语言定义的时区部分。
如果未指定“时区”,则表达式默认使用世界协调时间 (UTC)。
函数 | 说明 | 示例 |
---|---|---|
getFullYear |
检索表示当前年份的数字,例如 2020。 | 年份是 2020 年吗? request.time.getFullYear("America/Los_Angeles") == 2020
|
getMonth |
检索一年中的月份。月份值介于 0 到 11 之间,0 == 1 月,11 == 12 月。 | 月份是 1 月吗? request.time.getMonth("America/Los_Angeles") == 1
|
getDate |
检索该月日期。日期值介于 1 到 31 之间,1 是该月的第一天,31 是该月的 31 天。 |
日期是该月的第一天吗? request.time.getDate("America/Los_Angeles") == 1
|
getDayOfMonth |
检索该月日期。日期值的范围是从 0 到 30,其中 0 表示该月的第一天,30 表示该月的 31 日。 | 日期是该月的第一天吗? request.time.getDayOfMonth("America/Los_Angeles") == 0 |
getDayOfWeek |
检索该周日期。日期值的范围是从 0 到 6,其中 0 表示星期日,6 表示星期六。 | 当日是星期一吗? request.time.getDayOfWeek("America/Los_Angeles") == 1 |
getDayOfYear |
检索一年中的某天。天值介于 0 到 365 之间,其中 0 表示一年的第一天,365 表示一年中的 366 天。 |
当日是一年中的第一天吗? request.time.getDayOfYear("America/Los_Angeles") == 0
|
getHours |
检索该天中的时段。小时值的范围是从 0 到 23,其中 0 表示午夜,23 表示晚上 11 点。 |
时间是晚上 7 点吗? request.time.getHours("America/Los_Angeles") == 19 |
getMinutes |
检索该小时的分钟段。分钟值的范围是从 0 到 59,其中 0 表示第一分钟,59 表示最后一分钟。 |
时间是晚上 7:30 吗? request.time.getHours("America/Los_Angeles") == 19 && request.time.getMinutes("America/Los_Angeles") == 30 |
date |
返回表示标准化为世界协调时间 (UTC) 零点的日期的时间戳。 | 以世界协调时间 (UTC) 表示的当前时间。 request.time.date()
|
date(tz string) |
返回表示相对于 TimeZone 字符串标准化为零点的日期的时间戳 <tz>。 | 以太平洋时间表示的当前时间。
|
timeOfDay |
返回与 UTC 表示的时间戳相关的 google.type.TimeOfDay 。 |
以世界协调时间 (UTC) 表示的当日当前时间,例如“09:30:00” request.time.timeOfDay() |
timeOfDay(tz string) |
返回与时间戳相关且相对于 TimeZone 字符串的 google.type.TimeOfDay <tz>。 | 以太平洋时间表示的当日当前时间,例如“09:30:00” request.time.timeOfDay('America/Los_Angeles') |
between(start, stop) (针对时间戳) |
对于给定时间戳,如果时间戳介于“start”(含)和“stop”(不含)之间,则返回 “Start”和“stop”可以是 | 当前时间戳(太平洋标准时间)介于 2020 年 1 月 10 日 00:00(含)到 2020 年 1 月 11 日 00:00(不含)之间吗? request.time.date('08:00')
.between('2020-10-01T00:00:00+08:00', '2020-10-01T00:00:00+08:00')
|
between(start, stop string) (对于 TimeOfDay) |
对于给定的 type.TimeOfDay ,也可以是字符串,后者将转换为 type.TimeOfDay 。
|
当日当前时间(太平洋时间)介于上午 09:30(含)到下午 05:30(不含)之间吗? request.time.timeOfDay('America/Los_Angeles').between('09:30:00', '17:30:00')
|
下表举例说明了如何使用时间和日期限制:
政策示例 | 表达式 |
---|---|
允许轮班工人在每周周一到周五上午 9 点至下午 5 点之间访问资源,但 7 月 4 日除外。 | 选项 1: request.time.getDayOfWeek("America/Los_Angeles") >= 1 && request.time.getDayOfWeek("America/Los_Angeles") <= 5 && request.time.getHours("America/Los_Angeles") >= 9 && request.time.getHours("America/Los_Angeles") <= 17 && !(request.time.getMonth("America/Los_Angeles") == 6 && request.time.getDayOfMonth("America/Los_Angeles") == 3)
选项 2:
|
允许从 2020 年 3 月 1 日晚上 10 点到午夜临时访问资源。 | 选项 1: 选项 2:
|
以下是使用部分函数捕获特定时间范围的示例表达式:
表示营业时间范围
日期时间格式为“HH:MM:SS”,并遵循 RFC 3339 标准。
request.time.timeOfDay('America/Los_Angeles').between('09:30:00', '17:30:00')
request.time.date('America/Los_Angeles')
.between('01-10-2020T00:00:00+08:00', '01-11-2020T00:00:00-07:00')
表示当月第一周的的特定日期
(请注意,我们支持其他时区格式)
request.time.getDayOfMonth('America/Los_Angeles') < 7
表示每年的特定日期范围
例如,用于季度报告。
request.time.date('Asia/Hong_Kong').between(
request.time.getFullYear('08:00') + '-12-15T00:00:00+08:00',
request.time.getFullYear('08:00')+1 + '-01-01T00:00:00+08:00')