Como configurar as condições de acesso por dia e horário

Com o recurso de restrição de data e hora do Access Context Manager, as empresas podem definir controles de acesso com base na data e hora.

Ao avaliar o acesso de confiança zero, muitas vezes é necessário restringir o acesso do usuário a recursos em dias e horários específicos. Por exemplo, os funcionários que trabalham em turnos podem ter acesso apenas aos recursos da empresa durante o horário de turno, ou os usuários podem receber acesso temporário entre um horário específico do dia.

Para aplicar a condição de nível de acesso de hora e dia, use as funções listadas na tabela a seguir. O formato das funções é function(timezone).

É possível especificar timezone como UTC, fusos horários fixos que são deslocamentos explícitos de hora e minuto do UTC ou nomes longos timezone, como Europe/Paris, CET ou US/Central. Para uma listagem completa, consulte a seção Fuso horário da definição Common Expression Language.

Se você não especificar um "fuso horário", a expressão será padronizada como UTC.

Função Descrição Exemplo
getFullYear Recuperar o número que representa o ano atual, como 2020.

É o ano de 2020?

request.time.getFullYear("America/Los_Angeles") == 2020
getMonth Recuperar o mês do ano. Os valores do mês variam de 0 a 11, em que 0 == janeiro e 11 == dezembro.

É o mês de janeiro?

request.time.getMonth("America/Los_Angeles") == 1
getDate Recupere a data do mês. Os valores de data variam de 1 a 31, em que 1 é o primeiro do mês e 31 é o 31 do mês.

É o primeiro dia do mês?

request.time.getDate("America/Los_Angeles") == 1
getDayOfMonth Recuperar o dia do mês. Os valores do dia variam de 0 a 30, em que 0 é o primeiro do mês e 30 é o 31o dia do mês.

É o primeiro dia do mês?

request.time.getDayOfMonth("America/Los_Angeles") == 0
getDayOfWeek Recuperar o dia da semana. Os valores do dia variam de 0 a 6, em que 0 é domingo, e 6 é sábado.

É segunda-feira?

request.time.getDayOfWeek("America/Los_Angeles") == 1
getDayOfYear Recuperar o dia do ano. Os valores do dia variam de 0 a 365, em que 0 é o primeiro dia do ano e 365 é o 366o dia do ano.

É o primeiro dia do ano?

request.time.getDayOfYear("America/Los_Angeles") == 0
getHours Recuperar a hora do dia. Os valores de hora variam de 0 a 23, em que 0 é meia-noite e 23 é 23h.

São 19h?

request.time.getHours("America/Los_Angeles") == 19
getMinutes Recuperar o minuto da hora. Os valores de minuto variam de 0 a 59, em que 0 é o primeiro minuto e 59 é o último minuto da hora.

São 19h30?

request.time.getHours("America/Los_Angeles") == 19 && request.time.getMinutes("America/Los_Angeles") == 30
date Retorna o carimbo de data/hora que representa a data normalizada à meia-noite UTC.

Hora atual em UTC.

request.time.date()
date(tz string) Retorna o carimbo de data/hora que representa a data normalizada para a meia-noite em relação à string TimeZone <tz>.

Hora atual no horário do Pacífico.

request.time.date('America/Los_Angeles')

request.time.date('08:00')

timeOfDay Retorna o google.type.TimeOfDay associado ao carimbo de data/hora em UTC.

Hora atual do dia em UTC, como "09:30:00"

request.time.timeOfDay()
timeOfDay(tz string) Retorna o google.type.TimeOfDay associado ao carimbo de data/hora e à string TimeZone <tz>.

Hora atual do dia no Pacífico, como "09:30:00"

request.time.timeOfDay('America/Los_Angeles')
between(start, stop)

(para carimbo de data/hora)

Para um determinado carimbo de data/hora, retorne True se o carimbo de data/hora estiver entre "start" (inclusive) e "stop" (exclusivo).

"Start" e "stop" podem ser type.Timestamp ou string, que serão convertidos em type.Timestamp.

O carimbo de data/hora atual, no horário do Pacífico, entre 10 de janeiro de 2020 e as 00:00 (inclusive) e 11 de janeiro de 2020 (não incluso)?

request.time.date('08:00') .between('2020-10-01T00:00:00+08:00', '2020-10-01T00:00:00+08:00')
between(start, stop string)

(para TimeOfDay)

Para um determinado TimeOfDay, retorne True se a hora estiver entre "start" (inclusive) e "stop" (exclusivo).

"Start" e "stop" podem ser type.TimeOfDay ou string, que serão convertidos em type.TimeOfDay.

O horário atual é no horário do Pacífico entre 9h30 (inclusive) e 17h30 (exclusivo)?

request.time.timeOfDay('America/Los_Angeles').between('09:30:00', '17:30:00')

A tabela a seguir contém exemplos de como usar as restrições de data e hora:

Exemplo de política Expressão
Permitir que os funcionários que trabalham em turnos acessem os recursos de segunda a sexta-feira, das 9h às 17h, exceto no dia 4 de julho.

Opção 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)

Opção 2:

request.time.getDayOfWeek("America/Los_Angeles") >= 1 && request.time.getDayOfWeek("America/Los_Angeles") <= 5 && !(request.time.getMonth("America/Los_Angeles") == 6 && request.time.getDayOfMonth("America/Los_Angeles") == 3) && request.time.timeOfDay("America/Los_Angeles").between('09:30:00', '17:00:00')

Permitir o acesso temporário aos recursos em 1o de março de 2020, das 22h à meia-noite.

Opção 1:

request.time.getFullYear("America/Los_Angeles") == 2020 && request.time.getMonth("America/Los_Angeles") == 2 && request.time.getDayOfMonth("America/Los_Angeles") == 0 && request.time.getHours("America/Los_Angeles") >= 22 && request.time.getHours("America/Los_Angeles") <= 23

Opção 2:

request.time.between('2020-03-01T23:00:00+08:00', '2020-03-02T00:00:00+08:00')

Veja a seguir alguns exemplos de expressões que usam algumas das funções para capturar períodos específicos:

Expresse o intervalo durante o horário comercial
O formato data e hora é "HH:MM:SS" e segue o padrão 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')

Expressar dias específicos do mês, primeira semana
(Compatibilidade com formato de fuso horário alternativo)

request.time.getDayOfMonth('America/Los_Angeles') < 7

Períodos específicos expressos, anualmente
Por exemplo, para relatórios trimestrais.

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')