Skip to main content
דף זה הוא חלק ממיומנות של סוכן קידוד AI ונכתב לסוכנים, לא לבני אדם. לתיעוד Base44 הקריא לבני אדם, ראה את תיעוד המפתחים.

RLS Examples

תבניות מעשיות של Row-Level Security לסוגי אפליקציות נפוצים. חשוב: Base44 RLS תומך ב:
  • אופרטורים לוגיים: $or, $and, $nor לשילוב תנאים
  • אופרטורי שדה (עבור שדות data.*): $in, $nin, $ne, $all
  • user_condition: Equality בלבד (ללא אופרטורים)

תוכן


Simple Patterns (JSON Schema)

תבניות אלה עובדות עם פורמט RLS של סכמת JSON.

Todo App - גישה לבעלים בלבד

משתמשים רואים ומנהלים רק את המשימות שלהם.
{
  "name": "Task",
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "description": { "type": "string" },
    "completed": { "type": "boolean" },
    "priority": { "type": "string", "enum": ["low", "medium", "high"] },
    "due_date": { "type": "string", "format": "date" }
  },
  "rls": {
    "create": true,
    "read": { "created_by": "{{user.email}}" },
    "update": { "created_by": "{{user.email}}" },
    "delete": { "created_by": "{{user.email}}" }
  }
}

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

כל אחד יכול להגיש, רק מנהלים יכולים לצפות בהגשות.
{
  "name": "ContactSubmission",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "email": { "type": "string", "format": "email" },
    "message": { "type": "string" }
  },
  "rls": {
    "create": true,
    "read": { "user_condition": { "role": "admin" } },
    "update": { "user_condition": { "role": "admin" } },
    "delete": { "user_condition": { "role": "admin" } }
  }
}

פרופיל משתמש - ניהול עצמי

משתמשים יכולים לגשת רק לפרופיל שלהם.
{
  "name": "UserProfile",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "avatar_url": { "type": "string" },
    "bio": { "type": "string" },
    "preferences": { "type": "object" }
  },
  "rls": {
    "create": true,
    "read": { "created_by": "{{user.email}}" },
    "update": { "created_by": "{{user.email}}" },
    "delete": { "created_by": "{{user.email}}" }
  }
}

נתוני מחלקה - גישת מחלקה זהה

משתמשים יכולים לראות רק רשומות מהמחלקה שלהם.
{
  "name": "DepartmentAnnouncement",
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "content": { "type": "string" },
    "department": { "type": "string" }
  },
  "rls": {
    "create": { "user_condition": { "role": "manager" } },
    "read": { "data.department": "{{user.data.department}}" },
    "update": { "user_condition": { "role": "manager" } },
    "delete": { "user_condition": { "role": "admin" } }
  }
}

Subscription - מנוהל על ידי מנהל, קריא למשתמש דרך שדה email

{
  "name": "Subscription",
  "type": "object",
  "properties": {
    "user_email": { "type": "string" },
    "tier": { "type": "string", "enum": ["free", "basic", "pro", "enterprise"] },
    "credits": { "type": "number" },
    "renewal_date": { "type": "string", "format": "date" }
  },
  "rls": {
    "create": { "user_condition": { "role": "admin" } },
    "read": { "data.user_email": "{{user.email}}" },
    "update": { "user_condition": { "role": "admin" } },
    "delete": { "user_condition": { "role": "admin" } }
  }
}
הערה: תבנית זו מאפשרת רק למשתמשים לקרוא את המנוי שלהם. מנהלים צריכים להשתמש בממשק המשתמש של Dashboard כדי להגדיר גישת קריאה נוספת לעצמם.

נתונים פרטיים - לבעלים בלבד

{
  "name": "PrivateNotes",
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "content": { "type": "string" },
    "tags": { "type": "array", "items": { "type": "string" } }
  },
  "rls": {
    "create": true,
    "read": { "created_by": "{{user.email}}" },
    "update": { "created_by": "{{user.email}}" },
    "delete": { "created_by": "{{user.email}}" }
  }
}

קריאה ציבורית, כתיבה מאומתת

כל אחד יכול לקרוא, רק משתמשים מחוברים יכולים ליצור/לערוך את הרשומות שלהם.
{
  "name": "BlogPost",
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "content": { "type": "string" },
    "author_email": { "type": "string" }
  },
  "rls": {
    "create": true,
    "read": true,
    "update": { "created_by": "{{user.email}}" },
    "delete": { "created_by": "{{user.email}}" }
  }
}

שימוש באופרטורים

אופרטורים לוגיים

שלב מספר תנאים באמצעות $or, $and, או $nor: גישת Owner OR Admin:
{
  "name": "Document",
  "type": "object",
  "properties": {
    "title": { "type": "string" },
    "content": { "type": "string" }
  },
  "rls": {
    "create": true,
    "read": {
      "$or": [
        { "created_by": "{{user.email}}" },
        { "user_condition": { "role": "admin" } }
      ]
    },
    "update": {
      "$or": [
        { "created_by": "{{user.email}}" },
        { "user_condition": { "role": "admin" } }
      ]
    },
    "delete": { "user_condition": { "role": "admin" } }
  }
}
מספר תפקידים עם $or:
{
  "rls": {
    "read": {
      "$or": [
        { "user_condition": { "role": "admin" } },
        { "user_condition": { "role": "manager" } },
        { "user_condition": { "role": "hr" } }
      ]
    }
  }
}

אופרטורי שדה לשדות data.*

השתמש ב-$in, $nin, $ne, $all להשוואת שדות נתוני entity: גישה מבוססת תגים ($in):
{
  "rls": {
    "read": {
      "data.category": { "$in": ["public", "shared"] }
    }
  }
}
החרג סטטוסים ספציפיים ($nin):
{
  "rls": {
    "read": {
      "data.status": { "$nin": ["archived", "deleted"] }
    }
  }
}
לא שווה ($ne):
{
  "rls": {
    "read": {
      "data.visibility": { "$ne": "private" }
    }
  }
}
כל התגים חייבים להתאים ($all):
{
  "rls": {
    "read": {
      "data.required_tags": { "$all": ["approved", "reviewed"] }
    }
  }
}

שילוב אופרטורים לוגיים ואופרטורי שדה

{
  "rls": {
    "read": {
      "$and": [
        { "data.status": { "$ne": "draft" } },
        {
          "$or": [
            { "created_by": "{{user.email}}" },
            { "data.visibility": "public" }
          ]
        }
      ]
    }
  }
}

דוגמאות Field-Level Security

שלוט בגישה לשדות ספציפיים בתוך entity.

שדה משכורת רגיש

{
  "name": "Employee",
  "type": "object",
  "properties": {
    "name": { "type": "string" },
    "email": { "type": "string", "format": "email" },
    "salary": {
      "type": "number",
      "description": "Annual salary",
      "rls": {
        "read": { "user_condition": { "role": "hr" } },
        "write": { "user_condition": { "role": "hr" } }
      }
    },
    "performance_notes": {
      "type": "string",
      "description": "Manager notes",
      "rls": {
        "read": {
          "$or": [
            { "user_condition": { "role": "manager" } },
            { "user_condition": { "role": "hr" } }
          ]
        },
        "write": { "user_condition": { "role": "manager" } }
      }
    }
  }
}

שדות פנימיים למנהלים בלבד

{
  "name": "Order",
  "type": "object",
  "properties": {
    "order_number": { "type": "string" },
    "total": { "type": "number" },
    "internal_notes": {
      "type": "string",
      "description": "Internal processing notes",
      "rls": {
        "read": { "user_condition": { "role": "admin" } },
        "write": { "user_condition": { "role": "admin" } }
      }
    },
    "profit_margin": {
      "type": "number",
      "description": "Profit margin percentage",
      "rls": {
        "read": { "user_condition": { "role": "admin" } },
        "write": false
      }
    }
  }
}

Complex Patterns (Dashboard UI or Backend)

תבניות מסוימות עדיין עשויות לדרוש את ממשק המשתמש של Dashboard או פונקציות backend.

יחסים דו-כיווניים (למשל, חברויות, התאמות)

דרישה: כל אחד מהצדדים ביחסים צריך גישה. כעת אפשרי עם $or:
{
  "rls": {
    "read": {
      "$or": [
        { "data.user_a_email": "{{user.email}}" },
        { "data.user_b_email": "{{user.email}}" }
      ]
    }
  }
}
פתרונות חלופיים:
  1. עיצוב entity מחדש: אחסן שתי רשומות ליחסים (אחת לכל צד)
  2. פונקציית backend: שאילתה עם לוגיקה מותאמת

לוגיקה עסקית מורכבת

דרישה: גישה תלויה במספר שדות entity עם תנאים מורכבים. מגבלת JSON Schema: בעוד שאופרטורים עוזרים, לוגיקה עסקית מורכבת מאוד עדיין עשויה להיות קשה להביע. אפשרויות פתרון:
  1. פונקציית backend: ישם לוגיקת גישה מותאמת
  2. שילוב כללים פשוטים יותר: פרק כללים מורכבים לכללים פשוטים יותר ברמת entity וברמת שדה

שיטות עבודה מומלצות

אסטרטגיית אבטחה

השתמש בשילוב של RLS ברמת entity ואבטחה ברמת שדה:
סוג נתוניםגישהדוגמה
ניתן לעריכה על ידי משתמשEntity RLS: לבעלים בלבדUserProfile עם בדיקת created_by
שדות רגישיםField-level RLSשדה Salary עם בדיקת תפקיד HR
גישה למספר תפקידים$or עם user_conditionגישת Admin OR Manager
גישה מותניתאופרטורי שדה$in, $ne על שדות data
תוכן ציבוריEntity RLS: read: truePublicPost
תוכן פרטיEntity RLS: לבעלים בלבדPrivateNote

מתי להשתמש בכל גישה

דרישהגישה
תנאי יחיד (owner, admin, department)JSON Schema RLS
מספר תנאי OR/ANDJSON Schema RLS עם $or/$and
בדיקות ערך שדה עם $in/$ne/וכו’JSON Schema RLS לשדות data.*
בקרת גישה ברמת שדהJSON Schema FLS (rls ברמת שדה)
אופרטורי השוואה מורכבים ($gt, $lt)פונקציות backend
לוגיקה עסקית מורכבת מאודפונקציות backend

תבניות תפקידים נפוצות

תפקידגישה טיפוסית
adminגישה מלאה לכל הרשומות
moderatorגישת read/update, delete מוגבל
managerגישה מוגבלת למחלקה
userרק הרשומות שלו

סיכום אופרטורים נתמכים

אופרטורנתמךהערות
$orכןשלב מספר תנאים
$andכןכל התנאים חייבים להתאים
$norכןאף אחד מהתנאים לא מתאים
$inכןלשדות data.* בלבד
$ninכןלשדות data.* בלבד
$neכןלשדות data.* בלבד
$allכןלשדות data.* בלבד
$gt, $lt, $gte, $lteלאהשתמש בפונקציות backend
$regexלאהשתמש בפונקציות backend

סיכום מגבלות

לא נתמךחלופה
אופרטורים על user_conditionהשתמש ב-equality בלבד לבדיקות משתמש
אופרטורי השוואה ($gt, $lt)פונקציות backend
התאמת regex ($regex)פונקציות backend
יחסים בין entitiesפונקציות backend
דף זה תורגם באמצעות בינה מלאכותית. למידע המדויק והעדכני ביותר, עיין בגרסה האנגלית.