הגדרת בקרת גישה ב-Payload CMS

בקרת גישה ב-Payload CMS מוגדרת לעיתים קרובות באמצעות middleware, מה שמוביל לפרצות אבטחה ולקוד מורכב. אנו מיישמים בקרת גישה באמצעות פונקציות TypeScript טהורות המגדירות במדויק מי ניגש לאילו נתונים. הצוות שלנו מטפל בכל המחזור—מעיצוב תפקידים ועד יישום ותמיכה—ומבטיח הגנה אמינה וסקלביליות לפרויקט שלך.

פיתוח ותחזוקה של כל סוגי האתרים:

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

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

השירותים שאנו מציעים
מציג 1 מתוך 1כל 2062 השירותים
הגדרת בקרת גישה ב-Payload CMS
בינוני
~2-3 ימים

הכישורים שלנו:

שאלות נפוצות

העבודות האחרונות

  • פיתוח אתר חברה B2B ADVANCE
    פיתוח אתר חברה B2B ADVANCE
    1502
  • פיתוח אפליקציית ווב עבור FEEDME
    פיתוח אפליקציית ווב עבור FEEDME
    1344
  • פיתוח אתר עבור BELFINGROUP
    פיתוח אתר עבור BELFINGROUP
    1052
  • פיתוח חנות מקוונת לחברת FURNORO
    פיתוח חנות מקוונת לחברת FURNORO
    1307
  • פיתוח אפליקציית ווב עבור Enviok
    פיתוח אפליקציית ווב עבור Enviok
    1049
  • פיתוח אתר לחברת FIXPER
    פיתוח אתר לחברת FIXPER
    1033

מפתחים מתחילים לעיתים קרובות מנסים להגדיר הרשאות ב-Payload CMS באמצעות middleware או משתנים גלובליים. זה מוביל לחורי אבטחה ולקוד מסורבל שקשה לתחזק. הצוות שלנו, עם ניסיון של למעלה מ-10 שנים בייצור עם TypeScript ו-Payload CMS, מציע גישה שונה: כל כלל גישה הוא פונקציית TypeScript טהורה של הקונטקסט של הבקשה. הפונקציה מחזירה true (גישה מותרת), false (נדחתה), או אובייקט תנאי ש-Payload מוסיף לשאילתת מסד הנתונים כ-MongoDB $match או SQL WHERE. גישה זו מפחיתה את נפח הקוד פי 3–4 בהשוואה ל-middleware ומבטלת את האפשרות לפספס בדיקות הרשאות. במקום קונפיגורציות YAML והגדרות GUI — רק קוד השולט בכל פעולה: קריאה, יצירה, עדכון, מחיקה. Payload CMS Access Control מתאר את העקרונות הבסיסיים — אנחנו נראה פתרונות מוכנים לתרחישים טיפוסיים שיושמו בהצלחה ביותר מ-15 פרויקטים מסחריים.

איך פונקציות גישה עובדות

כל פונקציית גישה מקבלת אובייקט עם req (כולל req.user) ואופציונלית id של המסמך. תוצאה:

  • true — לאפשר ללא הגבלות;
  • false — לדחות;
  • אובייקט Where — פילטר ש-Payload מוסיף לשאילתת מסד הנתונים. המשתמש רואה רק מסמכים שעומדים בתנאי — זה מבטל סינון לאחר הבקשה.
// Функция доступа получает: req (с req.user), id (для операций над конкретным документом)
type AccessFunction = ({
  req,
  id,
}: {
  req: PayloadRequest;
  id?: string | number;
}) => boolean | Where | Promise<boolean | Where>;

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

  1. עיצוב מודל התפקידים. קבע אילו תפקידים נדרשים (מנהל, עורך, מחבר, לקוח) ואילו זכויות יש להם.
  2. הוסף שדה תפקיד לאוסף המשתמשים. השתמש ב-select והגדר זכויות גישה לשינוי שלו.
  3. יישם פונקציות גישה לכל אוסף. התחל עם read ו-create.
  4. הגדר הגבלות ברמת שדה. הסתר או חסום עריכה של שדות רגישים.
  5. בדוק תרחישים. ודא שמשתמשים אנונימיים לא רואים מסמכים פרטיים (חסימה של 100%), ומחבר לא יכול למחוק מסמכים של אחרים (חסימה של 95% אם מוגדר נכון).

מקרה בוחן: גישה רב-רמות לפלטפורמה רפואית

בפרויקט אחד לפלטפורמה רפואית, נדרשה מערכת שבה רופאים רואים רק את המטופלים שלהם, מנהלים רואים הכל, ומטופלים רואים רק את הרשומות שלהם. בנוסף, נדרשו הגבלות ברמת שדה: לדוגמה, אבחנה יכולה להיערך רק על ידי הרופא, ופרטי קשר רק על ידי המטופל. יישמנו זאת באמצעות פונקציות גישה שבודקות תפקיד ושיוך מחלקתי. תוצאות: זמן פיתוח מאפס — יומיים, נפח קוד — פחות מ-200 שורות. לאחר הפריסה, שגיאות גישה ירדו ב-90%, ועומס השרת ירד ב-35% בזכות סינון ברמת מסד הנתונים. בקשו ביקורת על מערכת הגישה הנוכחית שלכם — נזהה צווארי בקבוק ונציע אופטימיזציה.

הגדרת גישה לאוספים: תפקידים ושדות

דוגמה להגדרת אוסף המשתמשים עם תפקידים והגבלה על שינוי התפקיד:

// collections/Users.ts
const Users: CollectionConfig = {
  slug: 'users',
  auth: true,
  fields: [
    {
      name: 'firstName',
      type: 'text'
    },
    {
      name: 'lastName',
      type: 'text'
    },
    {
      name: 'role',
      type: 'select',
      options: [
        {
          label: 'Администратор',
          value: 'admin'
        },
        {
          label: 'Редактор',
          value: 'editor'
        },
        {
          label: 'Автор',
          value: 'author'
        },
        {
          label: 'Клиент',
          value: 'customer'
        },
      ],
      required: true,
      defaultValue: 'author',
      access: {
        // Только admin может менять роль
        update: ({ req }) => req.user?.role === 'admin',
      },
    },
  ],
}

ולאוסף הפוסטים, הגדר הרשאות כך שמנהל ועורך רואים את כל הפוסטים, מחבר רואה רק את שלו, ומשתמשים אנונימיים רואים רק פוסטים שפורסמו:

// collections/Posts.ts
const Posts: CollectionConfig = {
  slug: 'posts',
  access: {
    read: ({ req }) => {
      if (req.user?.role === 'admin' || req.user?.role === 'editor') return true
      return { status: { equals: 'published' } }
    },
    create: ({ req }) => ['admin', 'editor', 'author'].includes(req.user?.role || ''),
    update: ({ req }) => {
      if (!req.user) return false
      if (['admin', 'editor'].includes(req.user.role)) return true
      if (req.user.role === 'author') return { author: { equals: req.user.id } }
      return false
    },
    delete: ({ req }) => req.user?.role === 'admin',
  },
}

איך לארגן גישה מרובת דיירים?

לתוכניות מרובות דיירים — גישה דרך ארגון מקושר. המשתמש רואה רק מסמכים של הארגון שלו, מנהל רואה הכל:

// collections/Documents.ts
{
  slug: 'documents',
  access: {
    read: ({ req }) => {
      if (!req.user) return false
      if (req.user.role === 'admin') return true
      return {
        organization: {
          equals: req.user.organization
        }
      }
    },
    update: ({ req }) => {
      if (!req.user) return false
      if (req.user.role === 'admin') return true
      return {
        and: [
          {
            organization: {
              equals: req.user.organization
            }
          },
          {
            lockedBy: {
              not_equals: req.user.id
            }
          },
        ]
      }
    },
  },
}

אבטחת נקודות קצה API מותאמות אישית

נקודות קצה מותאמות אישית גם דורשות בדיקות הרשאות. להלן דוגמה עם ביקורת פעולות:

// Кастомный эндпоинт с проверкой доступа
{
  path: '/export',
  method: 'get',
  handler: async (req: PayloadRequest, res: Response) => {
    if (!req.user) return res.status(401).json({ error: 'Unauthorized' })
    if (!['admin', 'editor'].includes(req.user.role)) {
      return res.status(403).json({ error: 'Insufficient permissions' })
    }
    await req.payload.create({
      collection: 'audit-logs',
      data: {
        action: 'export',
        user: req.user.id,
        timestamp: new Date().toISOString(),
      },
    })
    const data = await req.payload.find({
      collection: 'documents',
      limit: 10000,
    })
    return res.json(data)
  },
}

תנאי Where לעומת פילטר לאחר: השוואה

קריטריון תנאי Where פילטר לאחר
ביצועים מהיר ב-50–80% באוספים עם >10,000 רשומות איטי יותר עקב טעינת כל הנתונים
מורכבות דורש הבנה של שאילתות MongoDB/SQL פשוט יותר ליישום
אבטחה סינון ברמת מסד הנתונים — נתונים אף פעם לא עוזבים את מסד הנתונים סיכון לדליפת נתונים בשגיאה
מדרגיות מצוין, עומס שרת מינימלי ירוד, מתדרדר עם גידול בנתונים

טבלת הרשאות תפקידים (דוגמה)

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

רשימת בדיקה להגדרת בקרת גישה

  • [ ] תפקידים והרשאותיהם הוגדרו
  • [ ] שדה תפקיד במשתמשים הוגדר עם הגבלת עדכון
  • [ ] פונקציות גישה נכתבו לכל אוסף
  • [ ] הגבלות ברמת שדה לנתונים רגישים
  • [ ] התנהגות משתמש אנונימי נבדקה
  • [ ] תרחישים עם תפקידים שונים נבדקו
  • [ ] נקודות קצה מותאמות אישית נבדקו

לוחות זמנים ומה כלול

הגדרת מערכת תפקידים ובקרת גישה לפרויקט עם 3–5 תפקידים ו-5–10 אוספים אורכת 2–3 ימים במפתח מלא. כולל:

  • עיצוב מודל תפקידים (יום אחד)
  • יישום פונקציות גישה לכל האוספים (1–2 ימים)
  • אבטחת נקודות קצה API מותאמות אישית (0.5 יום)
  • ביקורת אבטחה ובדיקת עומסים (0.5 יום)
  • תיעוד על תפקידים והרשאות (בפורמט README)

חיסכון בתחזוקה ארוכת טווח על הרשאות — עד 40%, והפחתת עלויות פיתוח — עד 30% בזכות שימוש חוזר בקוד. צרו קשר לייעוץ על הגדרת בקרת גישה: נעריך את הפרויקט שלכם ונציע את הפתרון האופטימלי.