Configura las condiciones de acceso por hora y día

La función de restricción de fecha y hora de Access Context Manager permite a las empresas configurar controles de acceso según la fecha y hora.

Cuando se evalúa el acceso de confianza cero, a menudo es necesario restringir el acceso de los usuarios a los recursos para días y horas específicos. Por ejemplo, es posible que los trabajadores por turnos solo puedan acceder a los recursos de la empresa durante su horario laboral, o que los usuarios tengan acceso temporal entre una hora específica del día.

Para aplicar la condición de nivel de acceso por hora y día, usa las funciones que se enumeran en la siguiente tabla. El formato de las funciones es function(timezone).

Puedes especificar timezone como UTC, zonas horarias fijas que son compensaciones horarias y de hora explícitas de UTC o nombres timezone largos, como Europe/Paris, CET o US/Central. Para obtener una lista completa, consulta la sección Zona horaria de la definición de Common Express Language.

Si no especificas una “zona horaria”, la expresión se configurará de forma predeterminada como UTC.

Función Descripción Ejemplo
getFullYear Recupera el número que representa el año actual, como 2020.

¿Es el año 2020?

request.time.getFullYear("America/Los_Angeles") == 2020
getMonth Recupera el mes del año. Los valores de mes varían de 0 a 11, en los que 0 == Enero y 11 = de diciembre.

¿Es el mes de enero?

request.time.getMonth("America/Los_Angeles") == 1
getDate Recupera la fecha del mes. Los valores de fecha varían entre 1 y 31, en los que 1 es el primero del mes y 31 es el 31 del mes.

¿Es el primer día del mes?

request.time.getDate("America/Los_Angeles") == 1
getDayOfMonth Recupera el día del mes. Los valores de día varían de 0 a 30, en los que 0 es el primer día del mes y 30 es el 31 del mes.

¿Es el primer día del mes?

request.time.getDayOfMonth("America/Los_Angeles") == 0
getDayOfWeek Recupera el día de la semana. Los valores de día varían de 0 a 6, en los que 0 es el domingo y 6 es el sábado.

¿Es lunes?

request.time.getDayOfWeek("America/Los_Angeles") == 1
getDayOfYear Recupera el día del año. Los valores de día varían entre 0 y 365, en los que 0 es el primer día del año y 365 es el día 366 del año.

¿Es el primer día del año?

request.time.getDayOfYear("America/Los_Angeles") == 0
getHours Recupera la hora del día. Los valores de hora varían entre 0 y 23, en los que 0 es la medianoche y 23 es 11 p.m.

¿A las 7 p.m.?

request.time.getHours("America/Los_Angeles") == 19
getMinutes Recupera el minuto de la hora. Los valores de minutos varían de 0 a 59, en los que 0 es el primer minuto y 59 es el último minuto de la hora.

¿A las 7:30 p.m.?

request.time.getHours("America/Los_Angeles") == 19 && request.time.getMinutes("America/Los_Angeles") == 30
date Muestra la marca de tiempo que representa la fecha normalizada a la medianoche UTC.

Hora actual en UTC

request.time.date()
date(tz string) Muestra la marca de tiempo que representa la fecha normalizada a la medianoche en relación con la string <tz> de la zona horaria.

Hora actual a la hora del Pacífico.

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

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

timeOfDay Muestra el google.type.TimeOfDay asociado con la marca de tiempo en UTC.

Hora actual del día en UTC, como “9:30:00”

request.time.timeOfDay()
timeOfDay(tz string) Muestra el archivo google.type.TimeOfDay asociado con la marca de tiempo y el relativo a la string de zona horaria <tz>.

Hora actual del día en hora del Pacífico, como “9:30:00”

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

(para la marca de tiempo)

Para una marca de tiempo determinada, muestra True si la marca de tiempo está entre el tiempo de “inicio” (inclusivo) y el “detención” (exclusivo).

“Inicio” y “detención” pueden ser type.Timestamp o una string, que se convertirán en type.Timestamp.

¿La marca de tiempo actual, en PST, entre el 10 de enero de 2020 00:00 (inclusivo) y el 11 de enero de 2020 00:00 (exclusivo)?

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)

En un TimeOfDay determinado, muestra True si la hora de la fecha está entre “inicio” (inclusivo) y “detención” (exclusivo).

“Inicio” y “detención” pueden ser type.TimeOfDay o una string, que se convertirán en type.TimeOfDay.

¿La hora actual del día, en hora del Pacífico, entre las 9:30 a.m. (inclusivo) y las 5:30 p.m. (exclusivo)?

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

La siguiente tabla contiene ejemplos de cómo usar restricciones de hora y fecha:

Ejemplo de una política Expresión
Permite que los trabajadores por turnos accedan a los recursos de lunes a viernes de 9:00 a.m. a 5:00 p.m., excepto el cuarto día de julio.

Opción 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)

Opción 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')

Permite el acceso temporal a los recursos el 1 de marzo de 2020 entre las 10 p.m. y la medianoche.

Opción 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

Opción 2:

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

A continuación, se incluyen algunas expresiones de ejemplo que usan algunas de las funciones para capturar intervalos de tiempo específicos:

Expresa el rango durante el horario de atención
El formato de fecha y hora es “HH:MM:SS” y sigue el estándar 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')

Expresa días específicos del mes, primera semana
(ten en cuenta la compatibilidad con el formato de zona horaria alternativa)

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

Expresa períodos específicos, anualmente
Por ejemplo, para informes trimestrales.

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