מדריך הרשאות משתמשים
מסמך זה מפרט את ההרשאות הזמינות במערכת ואת הפעולות שהן שולטות בהן.
המערכת משתמשת ב-בקרת גישה מבוססת תפקידים (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)) {
// בצע פעולה רגישה
}
אבטחה
עקרונות
- הרשאה מינימלית: תמיד הקצה את ההרשאות המינימליות הנדרשות.
- הפרדת תפקידים: אין להקצות הרשאות מנהל למשתמשים רגילים.
- ביקורת: כל שינוי בהרשאות נרשם ב-AuditLog.
בדיקה
לפני שחרור תפקיד חדש, בדוק:
- האם המשתמש יכול לגשת רק למשאבים שלו?
- האם הוא חסום ממשאבים של משתמשים אחרים?
- האם מנהלים יכולים לבצע התחזות ולראות את התוכן שלו?
פתרון תקלות
משתמש מקבל "403 Forbidden"
סיבות אפשריות:
- למשתמש אין את ההרשאה הנדרשת.
- ה-
PermissionsGuardחוסם את הבקשה. - האסימון (Token) פג תוקפו.
פתרון:
- בדוק את ההרשאות של המשתמש ב-DB.
- וודא שהדקורטור
@Permissions()תואם את הפעולה. - הנפק אסימון חדש.
מנהל לא יכול לגשת למשאב
סיבה:
מנהל במצב התחזות (x-customer-context מוגדר) אינו נחשב למנהל לצורך סינון נתונים.
פתרון:
הסר את הכותרת x-customer-context לחזרה למצב מנהל רגיל.