لمساعدتك في مساعدة المستخدمين على التحكم في بياناتهم، أنشأ فريق Firebase مكتبة تعمل على تبسيط عمليتين شائعتين لبيانات المستخدمين:
clearData
: يحذف بيانات المستخدم من خدمات محددة في Firebase (حاليًا) قاعدة بيانات الوقت الفعلي، وFirestore، والتخزين) عند حذف حساباتهم من خلال Firebase Authentication.exportData
: يحفظ هذا الخيار نسخة من بيانات المستخدم من خدمات Firebase في سلسلة JSON ويحمّلها إلى Cloud Storage ليتمكّن من تنزيلها بسهولة بنفسه.
استمر في القراءة لمعرفة كيفية إضافة الدوال إلى تطبيقك، أو انتقل مباشرةً إلى الرمز الموجود في مستودع GitHub حول خصوصية المستخدم في Firebase
إضافة clearData
أو exportData
إلى تطبيقك
يتم تنفيذ الدالتين clearData
وexportData
في المكتبة على أنّه Cloud Functions اللذَين تعملان على البيانات في Realtime Database وCloud Storage وCloud Firestore. تتمثل إضافة الدوال في تطبيقك الخاص في عملية من ثلاث خطوات:
- عدِّل ملف
user_privacy.json
في المكتبة ليعكس المخططات Realtime Database وCloud Firestore وCloud Storage في تطبيقك. - نشر
clearData
وexportData
باسم Cloud Functions. - تنفيذ مشغلات للوظائف في تطبيقك.
- يمكنك تأمين بيانات "
clearData
" باستخدام قواعد مساحة التخزين.
تعديل ملف user_privacy.json
للمكتبة
للبدء، عليك إنشاء نسخة طبق الأصل من مستودع GitHub لخصوصية المستخدمين في Firebase أو تنزيله.
عند الانتهاء من ذلك، افتح functions/user_privacy.json
في محرِّر نصوص. يتضمّن ملف json سلسلة من المسارات القابلة للتخصيص التي تستخدمها الدالتان clearData
وexportData
للعثور على بيانات تطبيقك في Realtime Database وCloud Firestore وCloud Storage. إذا كان تطبيقك يستخدم خدمة واحدة أو اثنتين فقط من هذه الخدمات، ابدأ بحذف عناصر JSON المرتبطة بالخدمات غير المستخدَمة.
وبعد إزالة العناصر، يمكنك البدء في استبدال الخدمات المتبقية. وقيم العنصر النائب مع هياكل البيانات الفعلية التي يستخدمها تطبيقك.
إضافة Realtime Database مسار إلى بيانات المستخدمين
لتخصيص user_privacy.json
لمثيل Realtime Database في تطبيقك، استبدِل قائمة سلاسل العناصر النائبة ضمن "database"
بالمسارات الفعلية إلى بيانات المستخدِم:
... "database": { "clear": [ "/users/UID_VARIABLE", // Replace with your "/admins/UID_VARIABLE" // actual RTDB paths ], "export": [ "/users/UID_VARIABLE", // Replace with your "/admins/UID_VARIABLE" // actual RTDB paths ] }, ...
إذا كنت تريد إضافة إحدى الدوال إلى تطبيقك فقط، يمكنك حذف كائن الدالة الأخرى، بدلاً من ملئه ببياناتك.
إضافة Cloud Firestore عنصرًا تحتوي على بيانات المستخدمين
لتخصيص user_privacy.json
لمثيل Cloud Firestore في تطبيقك، استبدِل قائمة العناصر النائبة ضمن "firestore"
بكائنات Cloud Firestore الفعلية التي تحتوي على بيانات المستخدمين:
... "firestore": { "clear": [ {"collection": "users", "doc": "UID_VARIABLE", "field": "name"}, {"collection": "users", "doc": "UID_VARIABLE"}, // Replace with your {"collection": "admins", "doc": "UID_VARIABLE"} // actual Firestore paths ], "export": [ {"collection": "users", "doc": "UID_VARIABLE", "field": "name"}, {"collection": "users", "doc": "UID_VARIABLE"}, // Replace with your {"collection": "admins", "doc": "UID_VARIABLE"} // actual Firestore paths ] }, ...
إذا كنت تريد إضافة إحدى الدوال إلى تطبيقك فقط، يمكنك حذف كائن الدالة الأخرى، بدلاً من ملئه ببياناتك.
إضافة حزمة Cloud Storage واسم الملف الذي يتضمّن بيانات المستخدمين
لتخصيص user_privacy.json
لمثيل Cloud Storage في تطبيقك، استبدِل حزمة تخزين العنصر النائب واسم الملف ضِمن "storage"
بالقيم الفعلية:
... "storage": { "clear": [ // Replace with your actual storage data ["clear-export.appspot.com", "UID_VARIABLE/sample_data.json"], ["clear-exportappspot.com", "UID_VARIABLE"] ], "export": [ // Replace with your actual storage data ["clear-export.appspot.com", "UID_VARIABLE/sample_data.json"] ] }, ...
إذا كنت تريد إضافة إحدى الدوال إلى تطبيقك فقط، يمكنك حذف كائن الدالة الأخرى، بدلاً من ملئه ببياناتك.
نشر clearData
وexportData
باسم Cloud Functions
إذا لم تكن معتادًا على استخدام "Cloud Functions" حتى الآن، يمكنك الاطّلاع على كيفية استخدامها في دليل البدء في Cloud Functions.
بعد أن تشعر بالارتياح تجاه Cloud Functions، يمكنك إضافة الدالتين clearData
وexportData
إلى مشروعك:
- يمكنك نسخ
user_data.json
المخصّص إلى دليلfunctions
. - انسخ الرمز من
index.js
في مكتبة خصوصية المستخدم إلىindex.js
لمشروعك.- إذا كنت لا تستخدم
clearData
، احذف الدوالclearData
وclearDatabaseData
وclearFirestoreData
وclearStorageData
. - إذا كنت لا تستخدم
exportData
، احذف الدوالexportData
وexportDatabaseData
وexportFirestoreData
وexportStorageData
.
- إذا كنت لا تستخدم
- انشر الدوال.
تنفيذ عوامل التشغيل لـ clearData
وexportData
تتطلب كل دالة مشغلًا مختلفًا:
clearData
: يتم تشغيله عندما يحذف أحد المستخدمين حسابه من خلال Authentication.exportData
: يتم تشغيلها بواسطة طلب HTTP.
تنفيذ مشغِل clearData
لتشغيل حدث clearData
، يجب استخدام طريقة من Authentication. إذا كنت
لم تنفِّذ ذلك بعد، أضِف Authentication إلى تطبيقك: أنظمة Apple الأساسية أو Android أو الويب.
بعد ذلك، أضِف طريقة لاستدعاء طريقة delete
الخاصة بحزمة تطوير البرامج (SDK) Authentication من أجل منصتك:
iOS+
FirebaseAuth.User.delete { error in
if let error = error {
print("Error deleting user: \(error)")
}
}
Android
FirebaseAuth.getCurrentUser().delete();
الويب
firebase.auth().currentUser.delete().catch(function(error) {
if (error.code === 'auth/requires-recent-login') {
window.alert('Please sign-in and try again.');
firebase.auth().signOut();
}
});
تنفيذ عامل تشغيل exportData
لتنفيذ عامل تشغيل exportData
، أضِف زرًا أو رابطًا إلى تطبيقك لاستدعاء
الدالة عن طريق طلب HTTP. مزيد من المعلومات عن دوال الاستدعاء
عبر HTTP في وظائف الاتصال عبر طلبات HTTP.
تفاصيل الطلب:
- النوع:
POST
- عنوان URL:
https://us-central1-<var>PROJECT-ID<.var>.cloudfunctions.net/exportData
- النص الأساسي:
<var>CURRENT_USER'S_UID</var>
استدعاء الدالة مباشرةً في Firebase Hosting
إذا كان تطبيقك هو تطبيق ويب تتم استضافته على Firebase Hosting، يمكنك استدعاء
clearData
من خلال الإدخال rewrite
في ملف firebase.json
الخاص بالموقع الإلكتروني:
"hosting": {
"rewrites": [
{"source": "/exportData", "function": "exportData"}
]
}
تأمين بيانات "exportData
" باستخدام قواعد مساحة التخزين
للحفاظ على اهتمام البيانات التي تم تصديرها خاصة، يُرجى إضافة Cloud Storage التي تفرض قيودًا على الوصول إلى المستخدِم المصدِّر.
- انتقِل إلى مساحة التخزين في وحدة تحكّم Firebase.
- افتح علامة التبويب القواعد.
- ألصِق القاعدة التالية، ثم انقر على نشر:
service firebase.storage { match /b/{bucket}/o { match /exportData { // Only allow access to the user who requested the export match /{uid} { allow read, write: if request.auth.uid == uid } match /{uid}/{path=**} { allow read, write: if request.auth.uid == uid } } // Other application rules... } }