דלג לתוכן הראשי

מדריך הרשאות משתמשים

מסמך זה מפרט את ההרשאות הזמינות במערכת ואת הפעולות שהן שולטות בהן. המערכת משתמשת ב-בקרת גישה מבוססת תפקידים (RBAC) המאוכפת דרך הדקורטור @Permissions().

רשימת הרשאות

קבוע הרשאה (Permission)תיאורמודולים/נקודות קצה עיקריים
MANAGE_USERSשליטה מלאה על חשבונות משתמשים (שאינם מנהלים).UsersController, Auth
MANAGE_DEVICESיצירה, עדכון, מחיקה של מכשירים והגדרותיהם.devices, device-config
MANAGE_CONTENTניהול תוכן בית כנסת (שיעורים, הודעות, זמני הלכה).Shior, GeneralMessage, Zmanim
MANAGE_ALERTSהגדרת כללי התראות וניטור התראות.AlertRules
MANAGE_REMOTE_CONTROLשליחת פקודות מרחוק למכשירי Android TV (איפוס, כיבוי מסך).RemoteControl
MANAGE_REPORTSיצירה והורדה של דוחות מערכת.Reports
MANAGE_NOTIFICATIONSהגדרת העדפות התראות ותזמון.Notifications
MANAGE_WHATSAPPחיבור הפעלות WhatsApp, שליחת הודעות, ניהול תבניות.WhatsappController
MANAGE_EMAIL_CONFIGהגדרת הגדרות SMTP.EmailConfig
MANAGE_SMS_CONFIGהגדרת הגדרות ספק SMS.SmsConfig
MANAGE_SYSTEMפעולות מערכת ברמה גבוהה: גיבויים, לוגים, עדכונים.SystemController
SYSTEM_CONFIG_READגישת קריאה בלבד להגדרות מערכת.SystemController (GET)
SYSTEM_CONFIG_WRITEשינוי ערכי הגדרות מערכת.SystemController (PUT)
VIEW_DASHBOARDגישה לסטטיסטיקות לוח המחוונים הראשי.Dashboard
VIEW_ANALYTICSגישה למודולי אנליטיקה מפורטים.Analytics
VIEW_SYSTEM_HEALTHניטור סטטוס תקינות מערכת.Health
VIEW_SYSTEM_METRICSצפייה במדדים ברמה נמוכה (CPU/RAM).Telemetry

שימוש בקוד

כדי להגן על קונטרולר או נקודת קצה ספציפית, השתמש בדקורטור @Permissions:

// הגנה על קונטרולר שלם
@Controller('devices')
@Permissions(Permission.MANAGE_DEVICES)
export class DevicesController {}

// הגנה על מתודה ספציפית
@Get('backup')
@Permissions(Permission.MANAGE_SYSTEM)
createBackup() {}

עקיפת מנהל (Admin Bypass)

משתמשים עם isAdmin: true או role: 'Admin' עוקפים אוטומטית את כל בדיקות ההרשאות, אלא אם כן מטופל במפורש בתוך לוגיקת השירות (כמו בידוד דייר עבור התחזות).

דוגמאות לתפקידים

תפקיד: מנהל (Admin)

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

{
"role": "Admin",
"isAdmin": true,
"permissions": [] // לא נדרש - גישה מלאה
}

תפקיד: מנהל בית כנסת (Synagogue Manager)

גישה לניהול תוכן ומכשירים, אך לא למערכת:

{
"role": "Manager",
"permissions": [
"MANAGE_DEVICES",
"MANAGE_CONTENT",
"MANAGE_NOTIFICATIONS",
"VIEW_DASHBOARD",
"VIEW_ANALYTICS"
]
}

תפקיד: גבאי (Gabbai)

גישה מוגבלת לניהול תוכן בלבד:

{
"role": "Gabbai",
"permissions": [
"MANAGE_CONTENT",
"VIEW_DASHBOARD"
]
}

תפקיד: צופה (Viewer)

גישת קריאה בלבד:

{
"role": "Viewer",
"permissions": [
"VIEW_DASHBOARD",
"VIEW_ANALYTICS"
]
}

ניהול הרשאות

הוספת הרשאה למשתמש

ב-UsersController, מנהלים יכולים לעדכן הרשאות:

PUT /api/users/:id
{
"permissions": ["MANAGE_DEVICES", "MANAGE_CONTENT"]
}

בדיקת הרשאות

בשירות, ניתן לבדוק אם למשתמש יש הרשאה ספציפית:

import { Permission } from '@/common/enums/permission.enum';

if (user.permissions.includes(Permission.MANAGE_SYSTEM)) {
// בצע פעולה רגישה
}

אבטחה

עקרונות

  1. הרשאה מינימלית: תמיד הקצה את ההרשאות המינימליות הנדרשות.
  2. הפרדת תפקידים: אין להקצות הרשאות מנהל למשתמשים רגילים.
  3. ביקורת: כל שינוי בהרשאות נרשם ב-AuditLog.

בדיקה

לפני שחרור תפקיד חדש, בדוק:

  • האם המשתמש יכול לגשת רק למשאבים שלו?
  • האם הוא חסום ממשאבים של משתמשים אחרים?
  • האם מנהלים יכולים לבצע התחזות ולראות את התוכן שלו?

פתרון תקלות

משתמש מקבל "403 Forbidden"

סיבות אפשריות:

  1. למשתמש אין את ההרשאה הנדרשת.
  2. ה-PermissionsGuard חוסם את הבקשה.
  3. האסימון (Token) פג תוקפו.

פתרון:

  • בדוק את ההרשאות של המשתמש ב-DB.
  • וודא שהדקורטור @Permissions() תואם את הפעולה.
  • הנפק אסימון חדש.

מנהל לא יכול לגשת למשאב

סיבה:

מנהל במצב התחזות (x-customer-context מוגדר) אינו נחשב למנהל לצורך סינון נתונים.

פתרון:

הסר את הכותרת x-customer-context לחזרה למצב מנהל רגיל.