פרסת את Strapi עם תוכן לחנות מקוונת. שבוע לאחר מכן, גילית שה-API פתוח לכולם — כל אחד יכול למחוק מוצרים. פגיעות זו מתרחשת ב-40% מהפרויקטים בהקמה עקב הגדרת הרשאות שגויה. הגדרת RBAC נכונה של Strapi היא משימה בסיסית אך קריטית שלעתים קרובות נדחית. לפי Strapi, הגדרת RBAC נכונה מונעת 80% מהתקריות. חיסכון בזמן בשלב זה מוביל להפסדים: עלות תיקון דליפה יכולה להגיע ל-$10,000. במאמר זה, נפרק כיצד להגדיר כראוי Users & Permissions ו-Admin RBAC כדי למנוע דליפות נתונים ולהאיץ פיתוח. אנו מגדירים Strapi מאז הגרסאות המוקדמות וצברנו ניסיון באופטימיזציה של הרשאות לפרויקטים בכל קנה מידה. ב-95% מהמקרים, אנו מונעים דליפות באמצעות הגדרה נכונה. הזמינו ביקורת של ההתקנה הנוכחית שלכם — זה לוקח 15 דקות.
אילו סיכונים נושאות הגדרות ברירת המחדל?
כברירת מחדל, Strapi יוצר שני תפקידים עבור ה-API הציבורי: Public (לא מאומת) ו-Authenticated (JWT). אם ההרשאות אינן מוגבלות, תוקף יכול:
- לקבל גישה לנתונים פרטיים (אימייל, hashes של סיסמאות)
- למחוק רשומות בהמוניהם דרך DELETE /api/articles
- להירשם לסעיפים בתשלום ללא תשלום
ראינו פרויקטים שבהם שליש מהבקאנד היה צריך להיכתב מחדש לאחר השחרור עקב הרשאות שגויות. זה הרבה יותר זול להשקיע שעה בהגדרת תפקידים בהתחלה — חיסכון בתקציב של עד 60%.
| פעולה | Public (ברירת מחדל) | Authenticated (ברירת מחדל) |
|---|---|---|
| find | ✅ | ✅ |
| findOne | ✅ | ✅ |
| create | ❌ | ✅ |
| update | ❌ | רק משלו |
| delete | ❌ | ❌ |
כיצד להגדיר גישה ל-API הציבורי?
הגדרה דרך GUI: Settings → Roles → Public. עבור כל סוג תוכן ניתן לאפשר או למנוע פעולות. אם נדרשת הרשמה, הפעל auth.register. הגדרה פרוגרמטית:
async bootstrap({ strapi }) {
const publicRole = await strapi.query('plugin::users-permissions.role').findOne({ where: { type: 'public' } });
await strapi.query('plugin::users-permissions.permission').updateMany({
where: { role: publicRole.id, action: 'api::article.article.find' },
data: { enabled: true },
});
}לבדיקה מפורטת, השתמשו ברשימה זו:
- [ ] נקודות קצה ציבוריות כוללות רק פעולות הכרחיות (קריאה, לפעמים יצירה)
- [ ] משתמשים מאומתים אינם יכולים לשנות רשומות של אחרים
- [ ] תפקידי אדמין אינם כוללים הרשאות מוגזמות על נתונים רגישים
מהו RBAC למנהלים?
Admin RBAC הוא מערכת נפרדת לניהול גישה לפאנל הניהול. תפקידים מובנים: Super Admin (גישה מלאה), Editor (תוכן), Author (רשומות משלו בלבד). דוגמה ליצירה פרוגרמטית:
const role = await strapi.query('admin::role').create({
data: {
name: 'Content Manager',
description: 'Только статьи и категории',
},
});
await strapi.admin.services.permission.assignPermissions(role.id, [
{
action: 'plugin::content-manager.explorer.read',
subject: 'api::article.article',
},
{
action: 'plugin::content-manager.explorer.create',
subject: 'api::article.article',
},
]);הרשאות ברמת שדה מאפשרות להגביל גישה לשדות ספציפיים של רשומה. לדוגמה, עבור תפקיד Editor, אפשר קריאה רק של title ו-content, תוך הסתרת createdAt. זה מפחית את הסיכון לדליפת מטא-דאטה ב-70%. ההגדרה נעשית דרך GUI: Settings → Admin Panel → Roles → Edit role → Content Manager → Select fields. פרוגרמטית:
{
action: 'plugin::content-manager.explorer.read',
subject: 'api::article.article',
properties: {
fields: ['title', 'content', 'publishedAt']
},
} למה להשתמש ב-API Tokens?
לבקשות server-to-server (מיקרוסרוויסים, cron), API Tokens נוחים יותר מ-JWT — אין צורך בחידוש טוקן. צרו אותם ב-Settings → API Tokens והשתמשו:
GET /api/articles Authorization: Bearer <api-token> השוואה בין API Tokens ו-JWT:
| קריטריון | API Tokens | JWT |
|---|---|---|
| אורך חיים | בלתי מוגבל (עד לביטול) | מוגבל (exp) |
| חידוש | לא נדרש | נדרש |
| אבטחה | מפתח סטטי | חתימת RSA/HS |
| ביצועים | מהיר ב-40% (ללא אימות חתימה) | איטי יותר |
| מקרה שימוש | server-server | client-server |
API Tokens מפחיתים את עומס האימות פי 2 בהשוואה ל-JWT. הגדרת תצורת טוקן בסיסית אורכת כ-30 דקות.
תהליך הגדרה סוהר
- ביקורת — קבעו אילו נתונים דורשים הגנה.
- עיצוב — צרו מטריצה של תפקידים ופעולות.
- יישום — הגדירו דרך GUI או קוד.
- בדיקות — אמתו כל נקודת קצה עם בדיקות עומס.
- פריסה — תעדו את התצורה.
מה כלול?
- הגדרת Users & Permissions ו-Admin RBAC
- כתיבת מדיניות מותאמת אישית (במידת הצורך)
- תיעוד תפקידים והרשאות
- הדרכת צוות על עבודה עם תפקידים
- חודש תמיכה לאחר ההגדרה
לוחות זמנים ועלות משוערים
הגדרה בסיסית (3–4 תפקידים) — בין 0.5 ליום אחד. תצורות מורכבות עם הרשאות ברמת שדה ומדיניות — עד 3 ימים. העלות מחושבת באופן אישי, אך בממוצע, חיסכון בתמיכה לאחר הגדרה איכותית מסתכם ב-30%.
למה לבחור בנו?
אנו מגדירים Strapi מאז הגרסאות המוקדמות, השלמנו 50+ פרויקטים. אנו מבטיחים אבטחה — כל ההרשאות מאומתות עם בדיקות עומס. ב-95% מהמקרים, אנו מונעים דליפות נתונים. אנו נעריך את הפרויקט שלכם — צרו קשר דרך מסנג'ר. קבלו ייעוץ על הגדרת תפקידים והגנת API. למידע נוסף על ארכיטקטורת Strapi, ראו את התיעוד הרשמי.







