אנו מפתחים אפליקציות מובייל לגני ילדים שהופכות לערוץ התקשורת המרכזי בין גננות להורים. תמונות מהיום, הודעות, תפריטים, מעקב נוכחות, תשלומי אוכל—טכנית פשוט, אבל יש דרישה מחמירה שמגדירה את כל הארכיטקטורה: נתונים אישיים של ילדים. האתגר המרכזי הוא לא רק ליצור אפליקציה נוחה, אלא להבטיח הגנה מלאה על הנתונים בהתאם לחוק הפדרלי 152-FZ ו-GDPR.
במשך יותר מ-5 שנים אנו יוצרים פתרונות למוסדות חינוך וצברנו 20+ פרויקטים. כל שלב פיתוח כולל ביקורת אבטחה. מניסיוננו, 95% מההורים מתחילים להשתמש באפליקציה מדי יום, וגננות מקצרות את הזמן על דוחות נייר ב-70%. לפי החוק הפדרלי מס' 152-FZ, עיבוד נתונים ביומטריים דורש הסכמה נפרדת, ולכן אנו משלבים זאת בארכיטקטורה כבר מההתחלה.
מה כולל פיתוח אפליקציית מובייל לגן ילדים?
אפליקציה סטנדרטית כוללת פיד אירועים, תפריט, מעקב נוכחות, תשלומים והתראות push. אבל אנו מתאימים כל פתרון לגן הספציפי: מספר קבוצות, דרישות דיווח, אינטגרציה עם הנהלת חשבונות.
איך להגן על נתונים אישיים של ילדים? — פיתוח אפליקציית מובייל
תמונה של ילד היא נתון ביומטרי מבחינת הפנים, ונתון אישי מבחינת זיהוי. לא ניתן לאחסן אותה ללא הסכמה מפורשת של ההורים. בפועל, זה אומר:
- הסכמה לעיבוד — טופס נפרד עם רשימת נתונים ומטרה. לא תיבת סימון במהלך ההרשמה.
- תמונות קבוצתיות מתפרסמות רק בערוץ "סגור" להורים של אותה קבוצה ספציפית, לא לכל הגן.
- ה-S3 bucket עם התמונות חייב להיות פרטי; גישה רק דרך כתובות presigned עם TTL של שעה, לא דרך קישורים ציבוריים.
- מחיקת נתונים לפי בקשת הורה (זכות למחיקה) מיושמת ברמת השרת.
אם מתעלמים מהכללים האלה, התלונה הראשונה ל-Roskomnadzor תגרום לבעיות לגן, לא למפתח.
איך אנו מיישמים אבטחה?
אנו משתמשים ב-Flutter לפיתוח חוצה-פלטפורמות—זה מקצר זמן ועלות. Firebase Security Rules מבטיחות גישה רק למשתמשים מאומתים לפי התפקיד שלהם. Firebase Authentication עם התחברות באמצעות מספר טלפון (OTP) נוחה להורים: אין צורך לזכור סיסמה. Firestore מספקת סנכרון בזמן אמת של הודעות והכרזות ללא WebSocket. Firebase Storage לתמונות עם כללי שרת—גישה רק אם request.auth.uid שייך לקבוצת הילד. התראות push דרך FCM עם הרשמה לנושא קבוצתי: הגננת שולחת הודעה אחת, כל ההורים בקבוצה מקבלים את ה-push. אין צורך לעבור ידנית על טוקנים.
דוגמה להגדרת Firestore Security Rules
match /groups/{groupId}/posts/{postId} { allow read: if request.auth.uid in resource.data.memberIds; } הכללים האלה מבטיחים שהורה רואה רק פוסטים מהקבוצה שלו. המנהל מקבל claim נפרד.
| רכיב | טכנולוגיה | מטרה |
|---|---|---|
| Frontend | Flutter (Dart) | אפליקציית מובייל |
| Auth | Firebase Auth (OTP) | התחברות עם מספר טלפון |
| Realtime | Firestore | פיד, מסנג'ר |
| Storage | Firebase Storage (presigned URLs) | תמונות |
| Push | FCM (topic) | התראות |
| Payments | SBP / YooKassa | תשלומי אוכל |
ליבה פונקציונלית
תפקידים: מנהל גן, גננת קבוצה, הורה. כל תפקיד רואה רק את הנתונים שלו—RBAC הוא חובה.
הגננת מסמנת נוכחות—ממשק פשוט, אבל הלוגיקה חשובה: סימון לתאריך עבר חייב לדרוש אישור או להיות מוגבל (לא ניתן לסמן נוכחות "לאחור" יותר מ-3 ימים). תשלום אוכל: אינטגרציה עם בנק דרך SBP או YooKassa, קבלות ב-PDF דרך חבילת match /groups/{groupId}/posts/{postId} { allow read: if request.auth.uid in resource.data.memberIds; } של Flutter או יצירה בצד השרת.
פיד האירועים הוא לא רשת חברתית. אין לייקים, אין תגובות מהורים אחרים (ילדים הם לא תוכן לאינסטגרם). רק תמונה + טקסט מהגננת, תגובות הורים (נקרא/לא נקרא).
לוח זמנים ותקציב
עלות הפיתוח מחושבת אישית, אבל לוחות זמנים משוערים:
| שלב | משך |
|---|---|
| MVP (נוכחות, פיד, push, תפקידים) | 8–12 שבועות |
| MVP + תשלומים, תפריט, דוחות | 14–18 שבועות |
| גרסה מלאה עם אנליטיקה | מ-16 שבועות |
אפליקציית Flutter זולה יותר מאשר native בגלל קוד בסיס אחד, ו-Firebase מקצרת את זמן פיתוח השרת פי 2 בהשוואה לשרת מותאם אישית.
איך לתכנן RBAC בלי סיבוכים מיותרים?
אנו משתמשים במבנה נתונים מקונן: לכל משתמש (הורה) מוקצית רשימה של pdf. לגננת יש גישה לקבוצות שבהן היא משויכת. למנהל יש גישה לכולם. בכללי האבטחה של Firestore, הבדיקה נראית כך:
match /groups/{groupId}/posts/{postId} { allow read: if request.auth.uid in resource.data.memberIds; } זה מתקנה למאות קבוצות ללא פיגור. לתרחישים מורכבים יותר (למשל, גישה לדוחות רק לרואה חשבון), אנו משתמשים ב-custom claims ב-Firebase.
תוכנית שלב-אחר-שלב ליישום RBAC באפליקציה
- ניתוח תפקידים — קביעה מי ניגש לנתונים (מנהל, גננת, הורה, רואה חשבון).
- עיצוב קבוצות — יצירת אוסף
groupIdsב-Firestore עם מערך שלmatch /groups/{groupId}/posts/{postId} { allow read: if request.auth.uid in resource.data.memberIds; }. - אימות — הגדרת Firebase Auth עם מספר טלפון.
- כללי אבטחה — כתיבת כללים לכל אוסף, בדיקת
request.auth.uid in resource.data.memberIds. - בדיקות — אימות שגננת לא יכולה לראות נתונים מקבוצה אחרת.
קבעו ייעוץ לפרויקט שלכם—נראה לכם איך זה עובד ב-30 דקות. צרו קשר לייעוץ על ארכיטקטורת הפרויקט שלכם. אנו מבטיחים עמידה ב-152-FZ ו-GDPR, מוכחת עם 20+ פרויקטים מוצלחים. קבלו ייעוץ—נעריך את הפרויקט שלכם ונציע את הפתרון האופטימלי.







