Configurar condições de acesso por hora e dia

A funcionalidade de restrição de data e hora do Gestor de acesso sensível ao contexto permite às empresas definir controlos de acesso com base na data e hora.

Ao avaliar o acesso de confiança zero, é frequentemente necessário restringir o acesso dos utilizadores aos recursos a dias e horas específicos. Por exemplo, os trabalhadores por turnos só podem ter autorização para aceder aos recursos da empresa durante o respetivo turno, ou os utilizadores podem receber acesso temporário entre uma determinada hora do dia.

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

Pode especificar timezone como UTC, fusos horários fixos que são desvios explícitos de horas e minutos em relação ao UTC ou como nomes longos timezone, como Europe/Paris, CET ou US/Central. Para ver uma lista completa, consulte a secção Fuso horário da definição da linguagem comum Express.

Se não especificar um "fuso horário", a expressão assume o fuso horário UTC.

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

É o ano de 2020?

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

O mês é janeiro?

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

É o primeiro dia do mês?

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

É o primeiro dia do mês?

request.time.getDayOfMonth("America/Los_Angeles") == 0
getDayOfWeek Obter o dia da semana. Os valores dos dias variam entre 0 e 6, em que 0 é domingo e 6 é sábado.

É segunda-feira?

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

É o primeiro dia do ano?

request.time.getDayOfYear("America/Los_Angeles") == 0
getHours Obter a hora do dia. Os valores das horas variam entre 0 e 23, em que 0 é a meia-noite e 23 é as 23:00.

São 19:00?

request.time.getHours("America/Los_Angeles") == 19
getMinutes Obtém o minuto da hora. Os valores dos minutos variam entre 0 e 59, em que 0 é o primeiro minuto e 59 é o último minuto da hora.

São 19:30?

request.time.getHours("America/Los_Angeles") == 19 && request.time.getMinutes("America/Los_Angeles") == 30
date Devolve a indicação de tempo que representa a data normalizada para a meia-noite UTC.

Hora atual em UTC.

request.time.date()
date(tz string) Devolve a indicação de tempo que representa a data normalizada para a meia-noite relativamente à string de fuso horário <tz>.

Hora atual na Hora do Pacífico.

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

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

timeOfDay Devolve o google.type.TimeOfDay associado à data/hora em UTC.

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

request.time.timeOfDay()
timeOfDay(tz string) Devolve o google.type.TimeOfDay associado à data/hora e relativo à string de fuso horário <tz>.

Hora atual do dia no fuso horário do Pacífico, como "09:30:00"

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

(para indicação de tempo)

Para uma determinada data/hora, devolve True se a data/hora estiver entre a hora "start" (inclusive) e "stop" (exclusiva).

"Start" e "stop" podem ser type.Timestamp ou string, que é convertida em type.Timestamp.

A data/hora atual, em PST, está entre 10 de janeiro de 2020 às 00:00 (inclusive) e 11 de janeiro de 2020 às 00:00 (exclusive)?

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, devolve True se a hora da data estiver entre a hora de "início" (inclusive) e a hora de "paragem" (exclusiva).

"Start" e "stop" podem ser type.TimeOfDay ou string, que é convertida em type.TimeOfDay.

A hora atual do dia, na Hora do Pacífico, está entre as 09:30 (inclusive) e as 17:30 (exclusive)?

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

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

Política de exemplo Expressão
Permitir que os trabalhadores por turnos acedam aos recursos de segunda a sexta-feira, entre as 09:00 e as 17:00, exceto a 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 acesso temporário a recursos a 1 de março de 2020, entre as 22:00 e as 00:00.

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

Seguem-se alguns exemplos de expressões que usam algumas das funções para captar intervalos de tempo específicos:

Expresse o intervalo durante o horário de funcionamento
O formato de data/hora é "HH:MM:SS" e segue a norma 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')

Expresse dias específicos do mês, primeira semana
(Note o suporte para o formato de fuso horário alternativo)

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

Expressar intervalos de datas específicos, 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')