



Parse Dashboard هي لوحة معلومات مستقلة لإدارة تطبيقات خادم Parse.
تثبيت لوحة القيادة من npm .
npm install -g parse-dashboard
يمكنك تشغيل لوحة القيادة لتطبيق مع أمر واحد عن طريق توفير معرف التطبيق ، والمفتاح الرئيسي ، وعنوان URL ، واسم مثل هذا:
parse-dashboard --dev --appId yourAppId --masterKey yourMasterKey --serverURL "https://example.com/parse" --appName optionalName
يمكنك تعيين PATH HOST و PORT و MOTTL من خلال توفير خيارات-- --host و- --port و- --mountPath لتحليل اللوح. يمكنك استخدام أي شيء تريده كاسم التطبيق ، أو تركه في هذه الحالة سيتم استخدام معرف التطبيق.
تعطل المعلمة- --dev ميزات الأمان جاهزة للإنتاج. هذه المعلمة مفيدة عند تشغيل لوحة معلومات Parse على Docker. باستخدام هذه المعلمة سوف:
allowInsecureHTTP الخيارmasterKey بنقله في نص واضح بدون تشفير
️ لا تستخدم هذه المعلمة عند نشر لوحة القيادة في بيئة الإنتاج.
بعد بدء لوحة القيادة ، يمكنك زيارة http: // localhost: 4040 في متصفحك:

Parse Dashboard متوافقة مع إصدارات خادم Parse التالية.
| إصدار لوحة القيادة | إصدار خادم تحليل | متناسق |
|---|---|---|
| > = 1.0 | > = 2.1.4 | ✅ نعم |
يتم اختبار Parse Dashboard بشكل مستمر مع أحدث إصدارات Node.js لضمان التوافق. نتبع خطة دعم Node.js على المدى الطويل واختبار فقط ضد الإصدارات التي يتم دعمها رسميًا ولم تصل إلى تاريخ نهاية العمر.
| إصدار | أحدث إصدار | نهاية الحياة | متناسق |
|---|---|---|---|
| Node.JS 18 | 18.20.4 | مايو 2025 | ✅ نعم |
| Node.js 20 | 20.18.0 | أبريل 2026 | ✅ نعم |
| Node.js 22 | 22.9.0 | أبريل 2027 | ✅ نعم |
| المعلمة | يكتب | خياري | تقصير | مثال | وصف |
|---|---|---|---|---|---|
apps | صفيف <boung> | لا | - | [{ ... }, { ... }] | التطبيقات التي تم تكوينها للوحة القيادة. |
infoPanel | صفيف <boung> | نعم | - | [{ ... }, { ... }] | تكوين لوحة المعلومات. |
infoPanel[*].title | خيط | لا | - | User Details | عنوان اللوحة. |
infoPanel[*].classes | صفيف <string> | لا | - | ["_User"] | الفصول التي يجب عرض لوحة المعلومات من أجلها. |
infoPanel[*].cloudCodeFunction | خيط | لا | - | getUserDetails | وظيفة الرمز السحابي التي تلقيت الكائن المحدد في متصفح البيانات وإرجاع الاستجابة المراد عرضها في لوحة المعلومات. |
apps.scripts | صفيف <boung> | نعم | [] | [{ ... }, { ... }] | البرامج النصية التي يمكن تنفيذها لهذا التطبيق. |
apps.scripts.title | خيط | لا | - | 'Delete User' | العنوان الذي سيتم عرضه في قائمة سياق متصفح البيانات وحوار تأكيد تشغيل البرنامج النصي. |
apps.scripts.classes | صفيف <string> | لا | - | ['_User'] | فئات الكائنات تحليل يمكن تنفيذ البرامج النصية لها. |
apps.scripts.cloudCodeFunction | خيط | لا | - | 'deleteUser' | اسم وظيفة Parse Cloud للتنفيذ. |
apps.scripts.showConfirmationDialog | بول | نعم | false | true | true إذا كان يجب عرض مربع حوار التأكيد قبل تنفيذ البرنامج النصي ، false إذا كان يجب تنفيذ البرنامج النصي على الفور. |
apps.scripts.confirmationDialogStyle | خيط | نعم | info | critical | نمط الحوار التأكيد. قيم صالحة: info (النمط الأزرق) ، critical (النمط الأحمر). |
apps.cloudConfigHistoryLimit | عدد صحيح | نعم | 100 | 100 | عدد القيم التاريخية التي يجب حفظها في تاريخ تغيير التكوين السحابي. قيم صالحة: 0 ... Number.MAX_SAFE_INTEGER . |
يمكنك أيضًا بدء لوحة القيادة من سطر الأوامر مع ملف التكوين. للقيام بذلك ، قم بإنشاء ملف جديد يسمى parse-dashboard-config.json داخل التسلسل الهرمي لوحة معلومات Parse المحلية. يجب أن يتطابق الملف مع التنسيق التالي:
{
"apps" : [
{
"serverURL" : " http://localhost:1337/parse " ,
"appId" : " myAppId " ,
"masterKey" : " myMasterKey " ,
"appName" : " MyApp "
}
]
} يمكنك بعد ذلك بدء لوحة القيادة باستخدام parse-dashboard --config parse-dashboard-config.json .
يعمل هذا فقط عند بدء تشغيل التطبيق باستخدام أمر
parse-dashboard
هناك أيضًا طريقتان يمكنك استخدامهما لتكوين لوحة القيادة باستخدام متغيرات البيئة.
قم بتوفير تكوين JSON بالكامل في PARSE_DASHBOARD_CONFIG وسيتم تحليله تمامًا مثل ملف التكوين.
يمكنك أيضًا تحديد كل خيار تكوين بشكل فردي.
HOST: "0.0.0.0"
PORT: "4040"
MOUNT_PATH: "/"
PARSE_DASHBOARD_TRUST_PROXY: undefined // Or "1" to trust connection info from a proxy's X-Forwarded-* headers
PARSE_DASHBOARD_SERVER_URL: "http://localhost:1337/parse"
PARSE_DASHBOARD_MASTER_KEY: "myMasterKey"
PARSE_DASHBOARD_APP_ID: "myAppId"
PARSE_DASHBOARD_APP_NAME: "MyApp"
PARSE_DASHBOARD_USER_ID: "user1"
PARSE_DASHBOARD_USER_PASSWORD: "pass"
PARSE_DASHBOARD_SSL_KEY: "sslKey"
PARSE_DASHBOARD_SSL_CERT: "sslCert"
PARSE_DASHBOARD_CONFIG: undefined // Only for reference, it must not exist
PARSE_DASHBOARD_COOKIE_SESSION_SECRET: undefined // set the cookie session secret, defaults to a random string. Use this option if you want sessions to work across multiple servers, or across restarts
من الممكن أيضًا إدارة تطبيقات متعددة من لوحة القيادة نفسها. ما عليك سوى إضافة إدخالات إضافية إلى مجموعة "apps" الخاصة بـ parse-dashboard-config.json :
{
"apps" : [
{
"serverURL" : " http://localhost:1337/parse " , // Self-hosted Parse Server
"appId" : " myAppId " ,
"masterKey" : " myMasterKey " ,
"appName" : " My Parse Server App "
},
{
"serverURL" : " http://localhost:1337/parse2 " , // Self-hosted Parse Server
"appId" : " myAppId " ,
"masterKey" : " myMasterKey " ,
"appName" : " My Parse Server App 2 "
}
]
}يحتوي Parse Dashboard على ملعب GRAPHQL مدمج للعب مع API Parse api التي تم إنشاؤها تلقائيًا.
يمكنك إعداد ملعب GraphQL عن طريق تمرير خيار- --graphQLServerURL إلى cli parse-dashboard :
parse-dashboard --dev --appId yourAppId --masterKey yourMasterKey --serverURL "https://example.com/parse" --graphQLServerURL "https://example.com/graphql" --appName optionalName
يتوفر خيار graphQLServerURL أيضًا من خلال متغير بيئة يسمى PARSE_DASHBOARD_GRAPHQL_SERVER_URL :
HOST: "0.0.0.0"
PORT: "4040"
MOUNT_PATH: "/"
PARSE_DASHBOARD_SERVER_URL: "http://localhost:1337/parse"
PARSE_DASHBOARD_GRAPHQL_SERVER_URL: "http://localhost:1337/graphql"
PARSE_DASHBOARD_MASTER_KEY: "myMasterKey"
PARSE_DASHBOARD_APP_ID: "myAppId"
PARSE_DASHBOARD_APP_NAME: "MyApp"
يمكنك أيضًا إعداد ملعب GraphQL في ملف parse-dashboard-config.json :
{
"apps" : [
{
"serverURL" : " http://localhost:1337/parse " ,
"graphQLServerURL" : " http://localhost:1337/graphql " ,
"appId" : " myAppId " ,
"masterKey" : " myMasterKey " ,
"appName" : " My Parse Server App "
},
{
"serverURL" : " http://localhost:1337/parse2 " ,
"graphQLServerURL" : " http://localhost:1337/graphql2 " ,
"appId" : " myAppId " ,
"masterKey" : " myMasterKey " ,
"appName" : " My Parse Server App 2 "
}
]
}بعد بدء لوحة القيادة ، يمكنك زيارة http://0.0.0.0:4040/apps/mytestapp/api_console/graphql في متصفحك:

تدعم Parse Dashboard إضافة أيقونة اختيارية لكل تطبيق ، بحيث يمكنك تحديدها أسهل في القائمة. للقيام بذلك ، يجب عليك استخدام ملف التكوين ، وتحديد iconsFolder فيه ، وتحديد معلمة iconName لكل تطبيق (بما في ذلك الامتداد). مسار iconsFolder نسبة إلى ملف التكوين. إذا كنت قد قمت بتثبيت parsedashboard على مستوى العالم ، فأنت بحاجة إلى استخدام المسار الكامل كقيمة لل iconsFolder . لتصور ما يعنيه ، في المثال التالي icons هو دليل يقع تحت نفس الدليل مثل ملف التكوين:
{
"apps" : [
{
"serverURL" : " http://localhost:1337/parse " ,
"appId" : " myAppId " ,
"masterKey" : " myMasterKey " ,
"appName" : " My Parse Server App " ,
"iconName" : " MyAppIcon.png " ,
}
],
"iconsFolder" : " icons "
} تدعم Parse Dashboard إضافة لون خلفية اختياري لكل تطبيق ، بحيث يمكنك تحديدها بشكل أسهل في القائمة. للقيام بذلك ، يجب عليك استخدام ملف التكوين ، وتحديد primaryBackgroundColor و secondaryBackgroundColor فيه ، معلمة لكل تطبيق. إنه CSS style . لتصور ما يعنيه ذلك ، في المثال التالي backgroundColor هو ملف تكوين:
{
"apps" : [
{
"serverURL" : " http://localhost:1337/parse " ,
"appId" : " myAppId " ,
"masterKey" : " myMasterKey " ,
"appName" : " My Parse Server App " ,
"primaryBackgroundColor" : " #FFA500 " , // Orange
"secondaryBackgroundColor" : " #FF4500 " // OrangeRed
},
{
"serverURL" : " http://localhost:1337/parse " ,
"appId" : " myAppId " ,
"masterKey" : " myMasterKey " ,
"appName" : " My Parse Server App [2] " ,
"primaryBackgroundColor" : " rgb(255, 0, 0) " , // Red
"secondaryBackgroundColor" : " rgb(204, 0, 0) " // DarkRed
}
]
} يمكنك تعيين appNameForURL في ملف التكوين لكل تطبيق للتحكم في عنوان URL الخاص بتطبيقك داخل لوحة القيادة. هذا يمكن أن يسهل استخدام الإشارات المرجعية أو مشاركة الروابط على لوحة القيادة الخاصة بك.
لتغيير التطبيق إلى الإنتاج ، ما عليك سوى تعيين production على true في ملف التكوين الخاص بك. القيمة الافتراضية خاطئة إذا لم يتم تحديدها.
يمكنك منع فرز بعض الأعمدة عن طريق إضافة خيارات preventSort في كل تكوين تطبيق
"apps" : [
{
"appId" : " local_app_id " ,
"columnPreference" : {
"_User" : [
{
"name" : " createdAt " ,
"visible" : true ,
"preventSort" : true
},
{
"name" : " updatedAt " ,
"visible" : true ,
"preventSort" : false
},
]
}
}
] إذا كان لديك فئات تحتوي على الكثير من الأعمدة وقمت بتصفيةها في كثير من الأحيان مع نفس الأعمدة ، يمكنك فرزها إلى الأعلى عن طريق توسيع إعداد columnPreference مع خيار filterSortToTop :
"apps" : [
{
"columnPreference" : {
"_User" : [
{
"name" : " objectId " ,
"filterSortToTop" : true
},
{
"name" : " email " ,
"filterSortToTop" : true
}
]
}
}
] تتوفر المرشحات التي تحفظها في متصفح البيانات في لوحة معلومات Parse فقط لمستخدم لوحة القيادة الحالي في جلسة المتصفح الحالية. لإتاحة المرشحات بشكل دائم لجميع مستخدمي لوحة القيادة لتطبيق ما ، يمكنك تحديد المرشحات في إعداد classPreference .
على سبيل المثال:
"apps" : [{
"classPreference" : {
"_Role" : {
"filters" : [{
"name" : " Filter Name " ,
"filter" : [
{
"field" : " objectId " ,
"constraint" : " exists "
}
]
}]
}
}
}]يمكنك إنشاء تعريف مرشح بسهولة دون الحاجة إلى كتابته باليد عن طريق حفظ مرشح أولاً في متصفح البيانات ، ثم تصدير تعريف المرشح ضمن إعدادات التطبيق> تفضيلات فئة التصدير .
يمكنك تحديد البرامج النصية لتنفيذ وظائف السحابة مع خيار scripts :
"apps" : [
{
"scripts" : [
{
"title" : " Delete Account " ,
"classes" : [ " _User " ],
"cloudCodeFunction" : " deleteAccount " ,
"showConfirmationDialog" : true ,
"confirmationDialogStyle" : " critical "
}
]
}
] يمكنك أيضًا تحديد الحقول المخصصة مع خيار scrips :
"apps" : [
{
"scripts" : [
{
"title" : " Delete account " ,
"classes" : [
{
"name" : " _User " ,
"fields" : [
{ "name" : " createdAt " , "validator" : " value => value > new Date( " 2025 " ) " }
]
}
],
"cloudCodeFunction" : " deleteAccount "
}
]
}
]
بعد ذلك ، حدد وظيفة السحابة في خادم Parse الذي سيتم استدعاؤه. سيتم توفير الكائن الذي تم تحديده في متصفح البيانات كمعلمة طلب:
Parse . Cloud . define ( 'deleteAccount' , async ( req ) => {
req . params . object . set ( 'deleted' , true ) ;
await req . params . object . save ( null , { useMasterKey : true } ) ;
} , {
requireMaster : true
} ) ; يمكن الوصول إلى الحقل الذي تم استدعاء البرنامج النصي بواسطة selectedField :
Parse . Cloud . define ( 'deleteAccount' , async ( req ) => {
if ( req . params . selectedField !== 'objectId' ) {
throw new Parse . Error ( Parse . Error . SCRIPT_FAILED , 'Deleting accounts is only available on the objectId field.' ) ;
}
req . params . object . set ( 'deleted' , true ) ;
await req . params . object . save ( null , { useMasterKey : true } ) ;
} , {
requireMaster : true
} ) ;encodeParseObjectInCloudFunction إلى true بحيث يتم توفير الكائن المحدد في متصفح البيانات في وظيفة السحابة كمثيل لـ Parse.Object . إذا لم يتم تعيين الخيار ، أو تم تعيينه على false ، أو كنت تستخدم إصدارًا أقدم من Parse Server ، يتم توفير الكائن ككائن JavaScript عادي ويجب تحويله من كائن JSON إلى مثيل Parse.Object مع req.params.object = Parse.Object.fromJSON(req.params.object); ، قبل أن تتمكن من استدعاء أي خصائص وأساليب Parse.Object .
للإصدارات الأقدم من خادم Parse:
Parse . Cloud . define ( 'deleteAccount' , async ( req ) => {
req . params . object = Parse . Object . fromJSON ( req . params . object ) ;
req . params . object . set ( 'deleted' , true ) ;
await req . params . object . save ( null , { useMasterKey : true } ) ;
} , {
requireMaster : true
} ) ; Parse . Cloud . define ( 'deleteAccount' , async ( req ) => {
if ( ! req . master || ! req . params . object ) {
throw 'Unauthorized' ;
}
req . params . object = Parse . Object . fromJSON ( req . params . object ) ;
req . params . object . set ( 'deleted' , true ) ;
await req . params . object . save ( null , { useMasterKey : true } ) ;
} ) ;بدلاً من بدء تشغيل لوحة التحليل مع CLI ، يمكنك أيضًا تشغيلها كبرنامج وسيط صريح.
var express = require ( 'express' ) ;
var ParseDashboard = require ( 'parse-dashboard' ) ;
var dashboard = new ParseDashboard ( {
"apps" : [
{
"serverURL" : "http://localhost:1337/parse" ,
"appId" : "myAppId" ,
"masterKey" : "myMasterKey" ,
"appName" : "MyApp"
}
]
} ) ;
var app = express ( ) ;
// make the Parse Dashboard available at /dashboard
app . use ( '/dashboard' , dashboard ) ;
var httpServer = require ( 'http' ) . createServer ( app ) ;
httpServer . listen ( 4040 ) ;إذا كنت ترغب في تشغيل كل من Parse Server و Parse Dashboard على نفس الخادم/المنفذ ، فيمكنك تشغيلها كوسيطة صريحة:
var express = require ( 'express' ) ;
var ParseServer = require ( 'parse-server' ) . ParseServer ;
var ParseDashboard = require ( 'parse-dashboard' ) ;
var api = new ParseServer ( {
// Parse Server settings
} ) ;
var options = { allowInsecureHTTP : false } ;
var dashboard = new ParseDashboard ( {
// Parse Dashboard settings
} , options ) ;
var app = express ( ) ;
// make the Parse Server available at /parse
app . use ( '/parse' , api ) ;
// make the Parse Dashboard available at /dashboard
app . use ( '/dashboard' , dashboard ) ;
var httpServer = require ( 'http' ) . createServer ( app ) ;
httpServer . listen ( 4040 ) ; تأكد من الوصول إلى عنوان URL الخاص بتطبيقاتك بواسطة متصفحك. إذا كنت تنشر لوحة القيادة ، فلن تعمل عناوين URL localhost .
من أجل نشر لوحة القيادة بشكل آمن دون تسرب مفتاح تطبيقات التطبيقات الخاصة بك ، ستحتاج إلى استخدام HTTPs والمصادقة الأساسية.
تكتشف لوحة القيادة المنشورة إذا كنت تستخدم اتصال آمن. إذا كنت تقوم بنشر لوحة القيادة خلف موازن التحميل أو الوكيل الأمامي ، فلن يتمكن التطبيق من اكتشاف أن الاتصال آمن. في هذه الحالة ، يمكنك بدء تشغيل لوحة القيادة باستخدام خيار- --trustProxy=1 (أو تعيين parse_dashboard_trust_proxy config var إلى 1) للاعتماد على رؤوس x-forwarded-لأمان اتصال العميل. يعد هذا مفيدًا للاستضافة على خدمات مثل Heroku ، حيث يمكنك الوثوق برؤوس الوكيل المقدمة لتحديد ما إذا كنت تستخدم HTTP أو HTTPS بشكل صحيح. يمكنك أيضًا تشغيل هذا الإعداد عند استخدام لوحة القيادة كوسيطة صريحة:
var trustProxy = true ;
var dashboard = new ParseDashboard ( {
"apps" : [
{
"serverURL" : "http://localhost:1337/parse" ,
"appId" : "myAppId" ,
"masterKey" : "myMasterKey" ,
"appName" : "MyApp"
}
] ,
"trustProxy" : 1
} ) ; يمكنك عرض حالة الأمان لخادم Parse الخاص بك عن طريق تمكين خيار لوحة القيادة enableSecurityChecks ، وزيارة إعدادات التطبيق> الأمان.
const dashboard = new ParseDashboard ( {
"apps" : [
{
"serverURL" : "http://localhost:1337/parse" ,
"appId" : "myAppId" ,
"masterKey" : "myMasterKey" ,
"appName" : "MyApp"
"enableSecurityChecks" : true
}
] ,
} ) ; يمكنك تكوين لوحة القيادة الخاصة بك للمصادقة الأساسية عن طريق إضافة أسماء المستخدمين وكلمات المرور الخاصة بك ملفات التكوين parse-dashboard-config.json :
{
"apps" : [{ "..." : " ... " }],
"users" : [
{
"user" : " user1 " ,
"pass" : " pass "
},
{
"user" : " user2 " ,
"pass" : " pass "
}
],
"useEncryptedPasswords" : true | false
} يمكنك تخزين كلمة المرور إما في plain text أو تنسيقات bcrypt . لاستخدام تنسيق bcrypt ، يجب عليك تعيين معلمة useEncryptedPasswords config إلى true . يمكنك إنشاء كلمات مرور مشفرة باستخدام parse-dashboard --createUser ، ولصق النتيجة في تكوين المستخدمين.
يمكنك إضافة طبقة إضافية من الأمان لحساب المستخدم من خلال طلب مصادقة متعددة العوامل (MFA) للمستخدم لتسجيل الدخول.
مع تمكين MFA ، يجب على المستخدم توفير كلمة مرور لمرة واحدة مرتبطة عادةً بجهاز فعلي ، بالإضافة إلى كلمة مرور تسجيل الدخول الخاصة بهم. هذا يعني بالإضافة إلى معرفة كلمة مرور تسجيل الدخول ، يحتاج المستخدم إلى الوصول الفعلي إلى جهاز لإنشاء كلمة مرور لمرة واحدة. تعتمد كلمة المرور لمرة واحدة على أساس الوقت (TOTP) وهي صالحة فقط لفترة قصيرة من الوقت ، عادة 30 ثانية ، حتى تنتهي صلاحيتها.
يتطلب المستخدم تطبيق Authenticator لإنشاء كلمة مرور لمرة واحدة. يتم توفير هذه التطبيقات من قبل العديد من الأطراف الثالثة ومعظمها مجانًا.
إذا قمت بإنشاء مستخدم جديد عن طريق تشغيل parse-dashboard --createUser ، فسيتم سؤالك عما إذا كنت تريد تمكين MFA للمستخدم الجديد. لتمكين MFA للمستخدم الحالي ، قم بتشغيل parse-dashboard --createMFA لإنشاء سر mfa ثم تضيفه إلى تكوين المستخدم الحالي ، على سبيل المثال:
{
"apps" : [{ "..." : " ... " }],
"users" : [
{
"user" : " user1 " ,
"pass" : " pass " ,
"mfa" : " lmvmOIZGMTQklhOIhveqkumss "
}
]
} تتبع Parse Dashboard معيار الصناعة ويدعم خوارزمية OTP الشائعة SHA-1 بشكل افتراضي ، لتكون متوافقة مع معظم تطبيقات المصادقة. إذا كان لديك متطلبات أمان محددة فيما يتعلق بخصائص TOTP (الخوارزمية ، طول الأرقام ، الفترة الزمنية) ، يمكنك تخصيصها باستخدام التكوين الموجهة المذكور أعلاه.
إذا قمت بتكوين لوحة القيادة الخاصة بك لإدارة تطبيقات متعددة ، فيمكنك تقييد إدارة التطبيقات بناءً على هوية المستخدم.
للقيام بذلك ، قم بتحديث ملف تكوين parse-dashboard-config.json لمطابقة التنسيق التالي:
{
"apps" : [{ "..." : " ... " }],
"users" : [
{
"user" : " user1 " ,
"pass" : " pass1 " ,
"apps" : [{ "appId" : " myAppId1 " }, { "appId" : " myAppId2 " }]
},
{
"user" : " user2 " ,
"pass" : " pass2 " ,
"apps" : [{ "appId" : " myAppId1 " }]
} ]
}تأثير مثل هذا التكوين هو على النحو التالي:
عندما يقوم user1 بتسجيل الدخول ، سيكون قادرًا على إدارة myAppId1 و myAppId2 من لوحة القيادة.
عندما يقوم user2 بتسجيل الدخول ، لن يتمكن/هي فقط من إدارة myAppId1 من لوحة القيادة.
بدء تشغيل الحاجز 2.6.5 ، من الممكن توفير readOnlyMasterKey التحليل لمنع الطفرات على الكائنات من العميل. إذا كنت ترغب في حماية لوحة القيادة الخاصة بك بهذه الميزة ، فما عليك سوى استخدام readOnlyMasterKey بدلاً من masterKey . ستفشل جميع مكالمات الكتابة.
ابدأ parse-server مع
{
"masterKey" : " YOUR_MASTER_KEY_HERE " ,
"readOnlyMasterKey" : " YOUR_READ_ONLY_MASTER_KEY " ,
}ثم في تكوين لوحة القيادة:
var trustProxy = true ;
var dashboard = new ParseDashboard ( {
"apps" : [
{
"serverURL" : "http://localhost:1337/parse" ,
"appId" : "myAppId" ,
"masterKey" : "YOUR_READ_ONLY_MASTER_KEY" ,
"appName" : "MyApp"
}
] ,
"trustProxy" : 1
} ) ; تأكد من تحديد The readOnlyMasterKey للتطبيقات التي تريد استخدامها ميزة القراءة فقط في تكوين "التطبيقات". يمكنك وضع علامة على المستخدم كمستخدم للقراءة فقط:
{
"apps" : [
{
"appId" : " myAppId1 " ,
"masterKey" : " myMasterKey1 " ,
"readOnlyMasterKey" : " myReadOnlyMasterKey1 " ,
"serverURL" : " myURL1 " ,
"port" : 4040 ,
"production" : true
},
{
"appId" : " myAppId2 " ,
"masterKey" : " myMasterKey2 " ,
"readOnlyMasterKey" : " myReadOnlyMasterKey2 " ,
"serverURL" : " myURL2 " ,
"port" : 4041 ,
"production" : true
}
],
"users" : [
{
"user" : " user1 " ,
"pass" : " pass1 " ,
"readOnly" : true ,
"apps" : [{ "appId" : " myAppId1 " }, { "appId" : " myAppId2 " }]
},
{
"user" : " user2 " ,
"pass" : " pass2 " ,
"apps" : [{ "appId" : " myAppId1 " }]
}
]
} وبهذه الطريقة ، سيتمكن user1 من الوصول إلى myAppId1 و myAppId2
تأكد من تحديد The readOnlyMasterKey للتطبيقات التي تريد استخدامها ميزة القراءة فقط في تكوين "التطبيقات". يمكنك إعطاء القراءة فقط الوصول إلى المستخدم على أساس كل تطبيق:
{
"apps" : [
{
"appId" : " myAppId1 " ,
"masterKey" : " myMasterKey1 " ,
"readOnlyMasterKey" : " myReadOnlyMasterKey1 " ,
"serverURL" : " myURL " ,
"port" : 4040 ,
"production" : true
},
{ "..." : " ... " }
],
"users" : [
{
"user" : " user " ,
"pass" : " pass " ,
"apps" : [{ "appId" : " myAppId " , "readOnly" : true }, { "appId" : " myAppId2 " }]
}
]
} مع هذا التكوين ، لن يقرأ user1 سوى الوصول إلى myAppId1 وقراءة/كتابة الوصول إلى myAppId2 .
مع أحدث إصدار من لوحة القيادة ، من الممكن إرسال رسائل موضعية لإشعارات الدفع. يمكنك تقديم قائمة من اللغات أو اللغات التي تريد دعمها لمستخدمي لوحة القيادة.
{
"apps" : [
{
"serverURL" : " http://localhost:1337/parse " ,
"appId" : " myAppId " ,
"masterKey" : " myMasterKey " ,
"appName" : " My Parse Server App " ,
"iconName" : " MyAppIcon.png " ,
"supportedPushLocales" : [ " en " , " ru " , " fr " ]
}
],
"iconsFolder" : " icons "
}يتم نشر صورة Docker الرسمية على Docker Hub
قم بتشغيل الصورة باستخدام config.json مثبتة على مستوى الصوت
docker run -d -p 8080:4040 -v host/path/to/config.json:/src/Parse-Dashboard/parse-dashboard-config.json parseplatform/parse-dashboard --dev
يمكنك أيضًا تمرير AppID و MasterKey و Serverurl كوسائط:
docker run -d -p 4040:4040 parseplatform/parse-dashboard --dev --appId $APP_ID --masterKey $MASTER_KEY --serverURL $SERVER_URL
بشكل افتراضي ، ستبدأ الحاوية التطبيق في المنفذ 4040 داخل الحاوية. ومع ذلك ، يمكنك تشغيل أمر مخصص أيضًا (راجع Deploying in production لإعداد مخصص).
في هذا المثال ، نريد تشغيل التطبيق في وضع الإنتاج في المنفذ 80 من جهاز المضيف.
docker run -d -p 80:8080 -v host/path/to/config.json:/src/Parse-Dashboard/parse-dashboard-config.json parse-dashboard --port 8080 --dev
إذا لم تكن على دراية بـ Docker ، فسيتم تمرير --port 8080 كوسيطة إلى نقطة الدخول لتشكيل Command Command npm start -- --port 8080 . سيبدأ التطبيق في المنفذ 8080 داخل الحاوية وسيتم تركيب المنفذ 8080 على المنفذ 80 على جهاز المضيف الخاص بك.
(ما يلي ليس قائمة كاملة من الميزات ولكن العمل قيد التقدم لإنشاء قائمة ميزات شاملة.)
يسمح مربع حوار التصفية بإضافة شروط مرشح علائقية استنادًا إلى فئات أخرى لها مؤشر إلى الفئة الحالية.
على سبيل المثال ، قد يكون لدى المستخدمين في فئة _User :
Purchase مع حقل مؤشر _UserPayment مع حقل مؤشر _Userيتيح لك مرشح علائقي تصفية جميع المستخدمين الذين:
Purchase )Payment ) لتطبيق مثل هذا المرشح ، ما عليك سوى الانتقال إلى فئة _User وإضافة شروط الفلتر المطلوبة مع فئات Purchase Payment .
يوفر متصفح البيانات لوحة معلومات يمكنها عرض المعلومات المتعلقة بالكائن المحدد حاليًا في جدول متصفح البيانات. يتم عرض لوحة المعلومات من خلال النقر فوق لوحة عرض زر القائمة في الزاوية العلوية اليمنى عند تصفح فئة تم تكوين لوحة المعلومات من أجلها في خيارات لوحة القيادة.
يعرض تكوين لوحة القيادة التالية لوحة معلومات لفئة _User مع User Details العنوان ، من خلال الاتصال بوظيفة Cloud Code getUserDetails وعرض الاستجابة التي تم إرجاعها.
"apps" : [
{
"infoPanel" : [
{
"title" : " User Details " ,
"classes" : [ " _User " ],
"cloudCodeFunction" : " getUserDetails "
}
]
}
]تتلقى وظيفة الرمز السحابي الكائن المحدد في الحمولة النافعة وإرجاع استجابة يمكن أن تشمل عناصر مختلفة.
يمكن أن تحتوي لوحة المعلومات على مقاطع متعددة لعرض مجموعات مختلفة من المعلومات.
| المعلمة | قيمة | خياري | وصف |
|---|---|---|---|
segments | صفيف | لا | مجموعة من الأجزاء المطلوبة ، حيث يمثل كل قطعة مجموعة مميزة من العناصر التي سيتم عرضها. |
segments[i].title | خيط | لا | عنوان الجزء الذي سيتم عرضه. |
segments[i].items | صفيف | لا | مجموعة مطلوبة من العناصر داخل القطاع. يمكن أن يكون كل عنصر من أنواع مختلفة ، مثل النص ، وأزواج القيمة الرئيسية ، والجداول ، والصور ، إلخ. |
مثال:
{
"panel" : {
"segments" : [
{
"title" : " Purchases " ,
"items" : [
{
"type" : " text " ,
"text" : " This user has a high churn risk! "
}
]
}
]
}
}يمكن أن تتضمن صفيف العناصر أنواعًا مختلفة من المحتوى مثل النص ، وأزواج القيمة الرئيسية ، والجداول ، والصور ، ومقاطع الفيديو ، والصوت ، والأزرار. يوفر كل نوع طريقة مختلفة لعرض المعلومات داخل لوحة المعلومات ، مما يسمح بتجربة مستخدم قابلة للتخصيص وغنية. فيما يلي شرح مفصل لكل نوع.
حقل نص بسيط.
| المعلمة | قيمة | خياري | وصف |
|---|---|---|---|
type | خيط | لا | يجب أن يكون "text" . |
text | خيط | لا | النص لعرضه. |
مثال:
{
"type" : " text " ,
"text" : " This user has a high churn risk! "
}عنصر نص يتكون من مفتاح وقيمة. يمكن ربط القيمة اختياريا بعنوان URL.
| المعلمة | قيمة | خياري | وصف |
|---|---|---|---|
type | خيط | لا | يجب أن يكون "keyValue" . |
key | خيط | لا | النص الرئيسي لعرضه. |
value | خيط | لا | نص القيمة لعرضه. |
url | خيط | نعم | عنوان URL الذي سيتم فتحه في علامة تبويب متصفح جديدة عند النقر فوق نص القيمة. |
أمثلة:
{
"type" : " keyValue " ,
"key" : " Lifetime purchase value " ,
"value" : " $10k "
}{
"type" : " keyValue " ,
"key" : " Last purchase ID " ,
"value" : " 123 " ,
"url" : " https://example.com/purchaseDetails?purchaseId=012345 "
}جدول مع الأعمدة والصفوف لعرض البيانات بتنسيق منظم.
| المعلمة | قيمة | خياري | وصف |
|---|---|---|---|
type | خيط | لا | يجب أن يكون "table" . |
columns | صفيف | لا | تعريفات العمود ، بما في ذلك الأسماء والأنواع. |
columns[*].name | خيط | لا | اسم العمود لعرضه. |
columns[*].type | خيط | لا | نوع قيمة العمود (على سبيل المثال ، "string" ، "number" ). |
rows | صفيف | لا | صفوف البيانات ، حيث يكون كل صف كائن يحتوي على قيم لكل عمود. |
مثال:
{
"type" : " table " ,
"columns" : [
{
"name" : " Name " ,
"type" : " string "
},
{
"name" : " Age " ,
"type" : " number "
}
],
"rows" : [
{
"Name" : " Alice " ,
"Age" : 30
},
{
"Name" : " Bob " ,
"Age" : 40
}
]
}صورة ليتم عرضها في اللوحة.
| المعلمة | قيمة | خياري | وصف |
|---|---|---|---|
type | خيط | لا | يجب أن تكون "image" . |
url | خيط | لا | عنوان URL للصورة لعرضه. |
مثال:
{
"type" : " image " ,
"url" : " https://example.com/images?purchaseId=012345 "
}مقطع فيديو ليتم عرضه في اللوحة.
| المعلمة | قيمة | خياري | وصف |
|---|---|---|---|
type | خيط | لا | يجب أن يكون "video" . |
url | خيط | لا | عنوان URL للفيديو لعرضه. |
مثال:
{
"type" : " video " ,
"url" : " https://example.com/video.mp4 "
}ملف صوتي ليتم تشغيله في اللوحة.
| المعلمة | قيمة | خياري | وصف |
|---|---|---|---|
type | خيط | لا | يجب أن يكون "audio" . |
url | خيط | لا | عنوان URL للصوت للعب. |
مثال:
{
"type" : " audio " ,
"url" : " https://example.com/audio.mp3 "
}زر يؤدي إلى إجراء إجراء عند النقر عليه.
| المعلمة | قيمة | خياري | وصف |
|---|---|---|---|
type | خيط | لا | يجب أن يكون "button" . |
text | خيط | لا | النص لعرضه على الزر. |
action | هدف | لا | الإجراء المراد تنفيذه عند النقر فوق الزر. |
action.url | خيط | لا | عنوان URL الذي يجب إرسال الطلب إليه. |
action.method | خيط | لا | طريقة HTTP لاستخدامها في الإجراء (على سبيل المثال ، "POST" ). |
action.headers | هدف | نعم | رؤوس اختيارية لتضمينها في الطلب. |
action.body | هدف | نعم | جسم الطلب بتنسيق JSON. |
مثال:
{
"type" : " button " ,
"text" : " Click me! " ,
"action" : {
"url" : " https://api.example.com/click " ,
"method" : " POST " ,
"headers" : {
"Content-Type" : " application/json "
},
"body" : {
"key" : " value "
}
}
}تتيح لك هذه الميزة استخدام متصفح البيانات كمستخدم آخر ، فيما يتعلق بأذونات بيانات المستخدم. على سبيل المثال ، سترى فقط السجلات والحقول التي يكون لدى المستخدم إذنًا لرؤية.
️ سيؤدي تسجيل الدخول كمستخدم آخر إلى تشغيل نفس مشغلات السحابة كما لو قام المستخدم بتسجيله في نفسه باستخدام أي طريقة تسجيل دخول أخرى. يتطلب تسجيل الدخول كمستخدم آخر إدخال كلمة مرور المستخدم.
تتيح لك هذه الميزة تغيير كيفية تمثيل المؤشر في المتصفح. بشكل افتراضي ، يتم تمثيل المؤشر بواسطة objectId الكائن المرتبط. يمكنك تغيير هذا إلى أي عمود آخر من فئة الكائن. على سبيل المثال ، إذا كان Installation الفئة يحتوي على حقل يحتوي على مؤشر User الفئة ، فسيعرض المؤشر objectId المستخدم افتراضيًا. يمكنك تغيير هذا لعرض email الحقل للمستخدم ، بحيث يعرض المؤشر عنوان البريد الإلكتروني للمستخدم بدلاً من ذلك.
objectId .createdAt و updatedAt و ACL كمفتاح مؤشر.objectId .
️ لكل مفتاح مؤشر مخصص في كل صف ، يتم تشغيل طلب الخادم لحل مفتاح المؤشر المخصص. على سبيل المثال ، إذا كان المتصفح يعرض فئة مع 50 صفًا وكل صف يحتوي على 3 مفاتيح مؤشر مخصصة ، يتم تشغيل ما مجموعه 150 طلبًا منفصلًا من الخادم.
ستستغرق هذه الميزة إما صفوف محددة أو جميع صفوف فئة فردية وتنقذها إلى ملف CSV ، والذي يتم تنزيله بعد ذلك. تتم إضافة رؤوس CSV إلى الجزء العلوي من الملف الذي يطابق أسماء الأعمدة.
️ يوجد حاليًا حد صف 10000 صف عند تصدير جميع البيانات. إذا كان أكثر من 10000 صف في الفصل ، فإن ملف CSV سيحتوي فقط على 10000 صف.
نريد حقًا أن يكون Parse لك ، ونرى أنه ينمو ويزدهر في مجتمع المصدر المفتوح. يرجى الاطلاع على دليل لوحة معلومات Parse.
اعتبارًا من 5 أبريل 2017 ، قامت Parse ، LLC بنقل هذا الرمز إلى منظمة Parse-Community ، ولن تساهم في هذا الرمز أو توزيعه.