Google is committed to advancing racial equity for Black communities. See how.
ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

بيانات المستخدم الآمنة

تتكامل قواعد أمان Firebase للتخزين السحابي مع مصادقة Firebase لتوفير مصادقة قوية تستند إلى المستخدم إلى التخزين السحابي. يسمح ذلك بالتحكم في الوصول الدقيق استنادًا إلى مطالبات رمز مصادقة Firebase المميز.

مصادقة المستخدم

عندما يكون مصادقة ينفذ المستخدم طلب ضد سحابة التخزين، و request.auth يتم ملؤها المتغير مع المستخدم uid ( request.auth.uid ) فضلا عن مطالبات Firebase مصادقة JWT ( request.auth.token ).

بالإضافة إلى ذلك ، عند استخدام المصادقة المخصصة ، يتم عرض مطالبات إضافية في الحقل request.auth.token .

عندما يقوم مستخدم لم تتم مصادقته بتنفيذ طلب ، يكون متغير request.auth null .

باستخدام هذه البيانات ، هناك عدة طرق شائعة لاستخدام المصادقة لتأمين الملفات:

  • عام: تجاهل request.auth
  • خاص مصدق: تحقق من أن request.auth ليس null
  • المستخدم الخاص: تحقق من أن request.auth.uid يساوي uid المسار
  • المجموعة الخاصة: تحقق من مطالبات الرمز المميز المخصصة لمطابقة المطالبة المختارة ، أو اقرأ البيانات الوصفية للملف لمعرفة ما إذا كان حقل البيانات الوصفية موجودًا

عامة

يمكن اعتبار أي قاعدة لا تراعي سياق request.auth قاعدة public ، لأنها لا تأخذ في الاعتبار سياق المصادقة للمستخدم. يمكن أن تكون هذه القواعد مفيدة لتصفح البيانات العامة مثل أصول اللعبة أو الملفات الصوتية أو أي محتوى ثابت آخر.

// Anyone to read a public image if the file is less than 100kB
// Anyone can upload a public file ending in '.txt'
match /public/{imageId} {
  allow read: if resource.size < 100 * 1024;
  allow write: if imageId.matches(".*\\.txt");
}

خاص مصدق

في حالات معينة ، قد ترغب في أن تكون البيانات قابلة للعرض من قبل جميع المستخدمين المعتمدين في تطبيقك ، ولكن ليس من قبل المستخدمين غير المصادق عليهم. نظرًا لأن متغير request.auth null لجميع المستخدمين الذين لم تتم مصادقتهم ، فكل ما عليك فعله هو التحقق من وجود متغير request.auth لطلب المصادقة:

// Require authentication on all internal image reads
match /internal/{imageId} {
  allow read: if request.auth != null;
}

المستخدم الخاص

إلى حد بعيد ، حالة الاستخدام الأكثر شيوعًا ل request.auth ستكون تزويد المستخدمين الفرديين بأذونات دقيقة على ملفاتهم: من تحميل صور الملف الشخصي إلى قراءة المستندات الخاصة.

نظرًا لأن الملفات الموجودة في Cloud Storage لها مسار كامل للملف ، فكل ما يلزم لجعل الملف يتحكم فيه المستخدم هو جزء من معلومات تعريف المستخدم الفريدة في مسار الملف (مثل uid الخاص بالمستخدم) والتي يمكن التحقق منها عند يتم تقييم القاعدة:

// Only a user can upload their profile picture, but anyone can view it
match /users/{userId}/profilePicture.png {
  allow read;
  allow write: if request.auth != null && request.auth.uid == userId;
}

مجموعة خاصة

حالة استخدام شائعة أخرى هي السماح بأذونات المجموعة على كائن ، مثل السماح للعديد من أعضاء الفريق بالتعاون في مستند مشترك. هناك عدة طرق للقيام بذلك:

  • Mint a Firebase Authentic مخصص مخصص يحتوي على معلومات إضافية حول عضو مجموعة (مثل معرف مجموعة)
  • قم بتضمين معلومات المجموعة (مثل معرف مجموعة أو قائمة uid s المصرح بها) في بيانات تعريف الملف

بمجرد تخزين هذه البيانات في الرمز المميز أو البيانات الوصفية للملف ، يمكن الرجوع إليها من داخل قاعدة:

// Allow reads if the group ID in your token matches the file metadata's `owner` property
// Allow writes if the group ID is in the user's custom token
match /files/{groupId}/{fileName} {
  allow read: if resource.metadata.owner == request.auth.token.groupId;
  allow write: if request.auth.token.groupId == groupId;
}

مثال كامل

يتم عرض الحالات البسيطة للأنواع الأربعة الشائعة لقيود المصادقة في المثال أدناه:

service firebase.storage {
  match /b/{bucket}/o {
    match /images {
      // Anyone can view any image (no auth, publicly readable)
      match /{allImages=**} {
        allow read;
      }

      // Only authenticated users can write to "public" images
      match /public/{imageId} {
        allow write: if request.auth != null;
      }

      // Only an individual user can write to "their" images
      match /{userId}/{imageId} {
        allow write: if request.auth.uid == userId;
      }

      // Allow a "group" of users to read/write to shared images
      // An owner metadata property on the object contains the groupId for reads
      // A custom token has been minted with a groupId property for writes
      match /{groupId}/{imageId} {
        allow read: if resource.metadata.owner == request.auth.token.groupId;
        allow write: if request.auth.token.groupId == groupId;
      }
    }
  }
}