Configurar condiciones de acceso de día y hora

La función de restricción de fecha y hora del Administrador de contextos de acceso permite a las empresas definir controles de acceso basados en la fecha y la hora.

Al evaluar el acceso de confianza cero, a menudo es necesario restringir el acceso de los usuarios a los recursos a días y horas concretos. Por ejemplo, es posible que los empleados que trabajan por turnos solo puedan acceder a los recursos de la empresa durante su jornada laboral, o que los usuarios tengan acceso temporal entre una hora concreta del día.

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

Puedes especificar timezone como UTC, zonas horarias fijas que son desfases explícitos de horas y minutos respecto a UTC, o como nombres largos de timezone, como Europe/Paris, CET o US/Central. Para ver una lista completa, consulta la sección Zona horaria de la definición del lenguaje común de Express.

Si no especificas una zona horaria, la expresión se ajustará a UTC de forma predeterminada.

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

¿Es el año 2020?

request.time.getFullYear("America/Los_Angeles") == 2020
getMonth Obtiene el mes del año. Los valores de los meses van de 0 a 11, donde 0 es enero y 11 es diciembre.

¿Es el mes de enero?

request.time.getMonth("America/Los_Angeles") == 0
getDate Obtiene la fecha del mes. Los valores de fecha van del 1 al 31, donde 1 es el primer día del mes y 31 es el día 31 del mes.

¿Es el primer día del mes?

request.time.getDate("America/Los_Angeles") == 1
getDayOfMonth Obtiene el día del mes. Los valores de los días van del 0 al 30, donde 0 es el primer día del mes y 30 es el día 31 del mes.

¿Es el primer día del mes?

request.time.getDayOfMonth("America/Los_Angeles") == 0
getDayOfWeek Obtiene el día de la semana. Los valores de los días van del 0 al 6, donde 0 es el domingo y 6 es el sábado.

¿Es lunes?

request.time.getDayOfWeek("America/Los_Angeles") == 1
getDayOfYear Obtiene el día del año. Los valores de los días van del 0 al 365, donde 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 las horas van de 0 a 23, donde 0 es medianoche y 23 son las 23:00.

¿Son las 19:00?

request.time.getHours("America/Los_Angeles") == 19
getMinutes Recupera el minuto de la hora. Los valores de los minutos van del 0 al 59, donde 0 es el primer minuto y 59 es el último minuto de la hora.

¿Son las 19:30?

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

Hora actual en UTC.

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

Hora actual en la zona horaria del Pacífico.

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

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

timeOfDay Devuelve el google.type.TimeOfDay asociado a la marca de tiempo en formato UTC.

Hora actual del día en formato UTC, como "09:30:00"

request.time.timeOfDay()
timeOfDay(tz string) Devuelve el valor google.type.TimeOfDay asociado a la marca de tiempo y relativo a la cadena TimeZone <tz>.

Hora actual del día en la zona horaria del Pacífico, como "09:30:00"

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

(para la marca de tiempo)

Dada una marca de tiempo, devuelve True si la marca de tiempo está entre la hora de inicio (incluida) y la de finalización (excluida).

"Start" y "stop" pueden ser type.Timestamp o una cadena, que se convertirá en type.Timestamp.

¿La marca de tiempo actual, en PST, está entre el 10 de enero del 2020 a las 00:00 (inclusive) y el 11 de enero del 2020 a las 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 un TimeOfDay determinado, devuelve True si la hora de la fecha está entre "start" (inclusive) y "stop" (exclusive).

"Start" y "stop" pueden ser type.TimeOfDay o una cadena, que se convertirá en type.TimeOfDay.

¿La hora actual del día, en hora del Pacífico, está entre las 09:30 (incluida) y las 17:30 (no incluida)?

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

En la siguiente tabla se incluyen ejemplos de cómo usar las restricciones de hora y fecha:

Política de ejemplo Expresión
Permitir que los empleados que trabajan por turnos accedan a los recursos de lunes a viernes de 9:00 a 17:00, excepto el día cuatro 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')

Permitir el acceso temporal a los recursos el 1 de marzo del 2020 de 22:00 a 00:00.

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 muestran algunas expresiones de ejemplo que usan algunas de las funciones para captar intervalos de tiempo específicos:

Expresar el intervalo durante el horario de apertura
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')

Expresar días concretos del mes, primera semana
(Nota: se admite el formato de zona horaria alternativa)

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

Expresar intervalos de fechas específicos por año
Por ejemplo, para generar 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')