הגדרת תנאי גישה לפי שעה ויום

התכונה 'הגבלת תאריך ושעה' ב-Access Context Manager מאפשרת לארגונים להגדיר אמצעי בקרה לגישה על סמך התאריך והשעה.

כשמעריכים גישה לפי עקרונות של אפס אמון, לעיתים קרובות יש צורך להגביל את גישת המשתמשים למשאבים לימים ולשעות ספציפיים. לדוגמה, יכול להיות שעובדים במשמרות יורשו לגשת למשאבים של החברה רק בשעות המשמרת שלהם, או שמשתמשים יקבלו גישה זמנית בין שעות מסוימות ביום.

כדי להחיל את התנאי של רמת הגישה לפי שעה ויום, משתמשים בפונקציות שמפורטות בטבלה הבאה. הפורמט של הפונקציות הוא function(timezone).

אפשר לציין את timezone כ-UTC, כאזורי זמן קבועים שהם שעות ודקות מפורשות של סטייה משעון UTC, או כשמות ארוכים של timezone כמו Europe/Paris,‏ CET או US/Central. רשימה מלאה מופיעה בקטע Timezone בהגדרה של Common Express Language.

אם לא מציינים 'אזור זמן', ברירת המחדל של הביטוי היא UTC.

תפקיד תיאור דוגמה
getFullYear אחזור המספר שמייצג את השנה הנוכחית, למשל 2020.

השנה היא 2020?

request.time.getFullYear("America/Los_Angeles") == 2020
getMonth שליפת החודש בשנה. ערכי החודש נעים בין 0 ל-11, כאשר 0 מייצג את ינואר ו-11 מייצג את דצמבר.

האם החודש הוא ינואר?

request.time.getMonth("America/Los_Angeles") == 0
getDate שליפת התאריך בחודש. ערכי התאריך הם מ-1 עד 31, כאשר 1 הוא היום הראשון בחודש ו-31 הוא היום ה-31 בחודש.

האם היום הוא הראשון בחודש?

request.time.getDate("America/Los_Angeles") == 1
getDayOfMonth שליפת היום בחודש. ערכי היום נעים בין 0 ל-30, כאשר 0 הוא היום הראשון בחודש ו-30 הוא היום ה-31 בחודש.

האם היום הוא הראשון בחודש?

request.time.getDayOfMonth("America/Los_Angeles") == 0
getDayOfWeek שליפת היום בשבוע. ערכי הימים נעים בין 0 ל-6, כאשר 0 הוא יום ראשון ו-6 הוא יום שבת.

היום יום שני?

request.time.getDayOfWeek("America/Los_Angeles") == 1
getDayOfYear שליפת היום בשנה. ערכי הימים נעים בין 0 ל-365, כאשר 0 הוא היום הראשון בשנה ו-365 הוא היום ה-366 בשנה.

האם זה היום הראשון של השנה?

request.time.getDayOfYear("America/Los_Angeles") == 0
getHours שליפת השעה ביום. ערכי השעות נעים בין 0 ל-23, כאשר 0 מייצג את חצות ו-23 מייצג את 23:00.

השעה 19:00?

request.time.getHours("America/Los_Angeles") == 19
getMinutes שליפת הדקה בשעה. ערכי הדקות נעים בין 0 ל-59, כאשר 0 היא הדקה הראשונה ו-59 היא הדקה האחרונה של השעה.

השעה עכשיו 19:30?

request.time.getHours("America/Los_Angeles") == 19 && request.time.getMinutes("America/Los_Angeles") == 30
date הפונקציה מחזירה את חותמת הזמן שמייצגת את התאריך בנרמול לחצות UTC.

השעה הנוכחית לפי שעון UTC.

request.time.date()
date(tz string) הפונקציה מחזירה את חותמת הזמן שמייצגת את התאריך בנרמול לחצות ביחס למחרוזת אזור הזמן <tz>.

השעה הנוכחית לפי שעון החוף המערבי.

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

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

timeOfDay מחזירה את google.type.TimeOfDay שמשויך לחותמת הזמן ב-UTC.

השעה הנוכחית בפורמט UTC, למשל '09:30:00'

request.time.timeOfDay()
timeOfDay(tz string) הפונקציה מחזירה את הערך google.type.TimeOfDay שמשויך לחותמת הזמן, ביחס למחרוזת TimeZone ‏ <tz>.

השעה הנוכחית ביום לפי שעון החוף המערבי של ארה"ב, למשל '09:30:00'

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

(לחותמת זמן)

עבור חותמת זמן נתונה, הפונקציה מחזירה True אם חותמת הזמן היא בין הזמן 'start' (כולל) לבין הזמן 'stop' (לא כולל).

הפרמטרים 'start' ו-'stop' יכולים להיות type.Timestamp או מחרוזת, שתומר ל-type.Timestamp.

האם חותמת הזמן הנוכחית, לפי שעון החוף המערבי, היא בין 10 בינואר 2020 בשעה 00:00 (כולל) לבין 11 בינואר 2020 בשעה 00:00 (לא כולל)?

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

‫(for TimeOfDay)

עבור TimeOfDay נתון, הפונקציה מחזירה True אם השעה בתאריך היא בין השעה 'start' (כולל) לבין השעה 'stop' (לא כולל).

הפרמטרים 'start' ו-'stop' יכולים להיות type.TimeOfDay או מחרוזת, שתומר ל-type.TimeOfDay.

האם השעה הנוכחית ביום, לפי שעון החוף המערבי, היא בין 09:30 (כולל) לבין 17:30 (לא כולל)?

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

בטבלה הבאה מופיעות דוגמאות לאופן השימוש בהגבלות על תאריכים ושעות:

מדיניות לדוגמה ביטוי
לאפשר לעובדים במשמרות לגשת למשאבים בימים שני עד שישי בין השעות 9:00 ל-17:00, למעט ב-4 ביולי.

אפשרות 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)

אפשרות 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')

אפשר גישה זמנית למשאבים ב-1 במרץ 2020, בין השעות 22:00 לחצות.

אפשרות 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

אפשרות 2:

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

בדוגמאות הבאות מופיעים ביטויים שמשתמשים בחלק מהפונקציות כדי לתעד טווחי זמן ספציפיים:

מציינים את הטווח בשעות הפעילות
פורמט התאריך והשעה הוא 'HH:MM:SS' והוא תואם לתקן 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')

ציון ימים ספציפיים בחודש, שבוע ראשון
(הערה: יש תמיכה בפורמט חלופי של אזור זמן)

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

הגדרת טווחי תאריכים ספציפיים, שנתיים
לדוגמה, לדיווח רבעוני.

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