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.
|
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 "Start" y "stop" pueden ser | ¿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 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:
|
Permitir el acceso temporal a los recursos el 1 de marzo del 2020 de 22:00 a 00:00. | Opción 1: Opción 2:
|
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')