



Parse Dashboard เป็นแดชบอร์ดแบบสแตนด์อโลนสำหรับการจัดการแอพเซิร์ฟเวอร์แยกของคุณ
ติดตั้งแดชบอร์ดจาก npm
npm install -g parse-dashboard
คุณสามารถเรียกใช้แดชบอร์ดสำหรับแอพที่มีคำสั่งเดียวโดยการจัดหารหัสแอพ, คีย์หลัก, URL และชื่อเช่นนี้:
parse-dashboard --dev --appId yourAppId --masterKey yourMasterKey --serverURL "https://example.com/parse" --appName optionalName
คุณสามารถตั้งค่าโฮสต์พอร์ตและ Mount Path ได้โดยการจัดหา --host --port และ-ตัวเลือก --mountPath เพื่อแยกวิเคราะห์บอร์ด คุณสามารถใช้อะไรก็ได้ที่คุณต้องการเป็นชื่อแอพหรือทิ้งไว้ในกรณีนี้จะใช้รหัสแอป
พารามิเตอร์ --dev ปิดใช้งานคุณสมบัติความปลอดภัยพร้อมการผลิต พารามิเตอร์นี้มีประโยชน์เมื่อเรียกใช้แดชบอร์ดแยกวิเคราะห์บน Docker การใช้พารามิเตอร์นี้จะ:
allowInsecureHTTPmasterKey เซิร์ฟเวอร์ Parse ใน ClearText โดยไม่ต้องเข้ารหัส
อย่าใช้พารามิเตอร์นี้เมื่อปรับใช้แดชบอร์ดแยกวิเคราะห์ในสภาพแวดล้อมการผลิต
หลังจากเริ่มแดชบอร์ดคุณสามารถเยี่ยมชม http: // localhost: 4040 ในเบราว์เซอร์ของคุณ:

Parse Dashboard เข้ากันได้กับเวอร์ชันเซิร์ฟเวอร์แยกวิเคราะห์ต่อไปนี้
| Parse Dashboard เวอร์ชัน | Parse Server เวอร์ชัน | เข้ากันได้ |
|---|---|---|
| > = 1.0 | > = 2.1.4 | ✅ใช่ |
Parse Dashboard ได้รับการทดสอบอย่างต่อเนื่องกับรุ่นล่าสุดของ Node.js เพื่อให้แน่ใจว่าเข้ากันได้ เราทำตามแผนการสนับสนุนระยะยาวของ Node.js และทดสอบเฉพาะเวอร์ชันที่ได้รับการสนับสนุนอย่างเป็นทางการและยังไม่ถึงวันสุดท้ายของชีวิต
| รุ่น | เวอร์ชันล่าสุด | การสิ้นสุดของชีวิต | เข้ากันได้ |
|---|---|---|---|
| Node.js 18 | 18.20.4 | พฤษภาคม 2025 | ✅ใช่ |
| node.js 20 | 20.18.0 | เมษายน 2569 | ✅ใช่ |
| Node.js 22 | 22.9.0 | เมษายน 2027 | ✅ใช่ |
| พารามิเตอร์ | พิมพ์ | ไม่จำเป็น | ค่าเริ่มต้น | ตัวอย่าง | คำอธิบาย |
|---|---|---|---|---|---|
apps | อาร์เรย์ <Object> | เลขที่ | - | [{ ... }, { ... }] | แอพที่กำหนดค่าสำหรับแดชบอร์ด |
infoPanel | อาร์เรย์ <Object> | ใช่ | - | [{ ... }, { ... }] | การกำหนดค่าแผงข้อมูล |
infoPanel[*].title | สาย | เลขที่ | - | User Details | ชื่อแผง |
infoPanel[*].classes | อาร์เรย์ <String> | เลขที่ | - | ["_User"] | คลาสที่ควรแสดงแผงข้อมูล |
infoPanel[*].cloudCodeFunction | สาย | เลขที่ | - | getUserDetails | ฟังก์ชั่นรหัสคลาวด์ซึ่งได้รับวัตถุที่เลือกในเบราว์เซอร์ข้อมูลและส่งคืนการตอบกลับที่จะแสดงในแผงข้อมูล |
apps.scripts | อาร์เรย์ <Object> | ใช่ | [] | [{ ... }, { ... }] | สคริปต์ที่สามารถดำเนินการสำหรับแอพนั้น |
apps.scripts.title | สาย | เลขที่ | - | 'Delete User' | ชื่อที่จะแสดงในเมนูบริบทของเบราว์เซอร์ข้อมูลและกล่องโต้ตอบการยืนยันสคริปต์เรียกใช้ |
apps.scripts.classes | อาร์เรย์ <String> | เลขที่ | - | ['_User'] | คลาสของวัตถุแยกวิเคราะห์ที่สามารถดำเนินการสคริปต์ได้ |
apps.scripts.cloudCodeFunction | สาย | เลขที่ | - | 'deleteUser' | ชื่อของฟังก์ชั่นคลาวด์แยกวิเคราะห์เพื่อดำเนินการ |
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 ภายในลำดับชั้นของไดเรกทอรีไดเรกทอรีแผงหน้าปัดในพื้นที่ของคุณ ไฟล์ควรตรงกับรูปแบบต่อไปนี้:
{
"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
การจัดการหลายแอพจากแดชบอร์ดเดียวกันก็เป็นไปได้เช่นกัน เพียงเพิ่มรายการเพิ่มเติมลงใน parse-dashboard-config.json "apps" ของไฟล์ "
{
"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 ในตัวเพื่อเล่นกับ GraphQL API ที่สร้างโดยอัตโนมัติ
คุณสามารถตั้งค่าสนามเด็กเล่น GraphQL ได้โดยผ่านตัวเลือก --graphQLServerURL ไปยัง parse-dashboard CLI:
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
}
]
}
}
] ตัวกรองที่คุณบันทึกไว้ในเบราว์เซอร์ข้อมูลของแผงหน้าปัดแยกใช้สำหรับผู้ใช้แดชบอร์ดปัจจุบันในเซสชันเบราว์เซอร์ปัจจุบัน ในการทำให้ตัวกรองพร้อมใช้งานอย่างถาวรสำหรับผู้ใช้แดชบอร์ดทั้งหมดของแอพคุณสามารถกำหนดตัวกรองในการตั้งค่า 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 . Cloud . define ( 'deleteAccount' , async ( req ) => {
req . params . object . set ( 'deleted' , true ) ;
await req . params . object . save ( null , { useMasterKey : true } ) ;
} , {
requireMaster : true
} ) ; ฟิลด์ที่ SelectedField สามารถเข้าถึงได้โดยสคริปต์สามารถเข้าถึงได้โดย 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 รุ่นเก่ากว่าวัตถุนั้นจะมีให้เป็นวัตถุจาวาสคริปต์ธรรมดาและจำเป็นต้องแปลงจากวัตถุ 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
} ) ; คุณสามารถดูสถานะความปลอดภัยของเซิร์ฟเวอร์การแยกวิเคราะห์ของคุณโดยเปิดใช้งานตัวเลือกแดชบอร์ด 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 คุณต้องตั้งค่าพารามิเตอร์ config useEncryptedPasswords เป็น true คุณสามารถสร้างรหัสผ่านที่เข้ารหัสได้โดยใช้ parse-dashboard --createUser และวางผลลัพธ์ในการกำหนดค่าผู้ใช้ของคุณ
คุณสามารถเพิ่มเลเยอร์ความปลอดภัยเพิ่มเติมสำหรับบัญชีผู้ใช้โดยต้องการการรับรองความถูกต้องแบบหลายปัจจัย (MFA) เพื่อให้ผู้ใช้เข้าสู่ระบบ
เมื่อเปิดใช้งาน MFA ผู้ใช้จะต้องระบุรหัสผ่านครั้งเดียวที่โดยทั่วไปแล้วจะถูกผูกไว้กับอุปกรณ์ทางกายภาพนอกเหนือจากรหัสผ่านเข้าสู่ระบบ ซึ่งหมายความว่านอกเหนือจากการรู้รหัสผ่านเข้าสู่ระบบแล้วผู้ใช้จำเป็นต้องเข้าถึงอุปกรณ์ทางกายภาพเพื่อสร้างรหัสผ่านครั้งเดียว รหัสผ่านครั้งเดียวนี้ใช้เวลา (TOTP) และใช้ได้เพียงระยะเวลาสั้น ๆ โดยทั่วไป 30 วินาทีจนกว่าจะหมดอายุ
ผู้ใช้ต้องการแอพ Authenticator เพื่อสร้างรหัสผ่านครั้งเดียว แอพเหล่านี้จัดทำโดยบุคคลที่ 3 จำนวนมากและส่วนใหญ่ฟรี
หากคุณสร้างผู้ใช้ใหม่โดยใช้ parse-dashboard --createUser คุณจะถูกถามว่าคุณต้องการเปิดใช้งาน MFA สำหรับผู้ใช้ใหม่หรือไม่ หากต้องการเปิดใช้งาน MFA สำหรับผู้ใช้ที่มีอยู่ให้เรียกใช้ parse-dashboard --createMFA เพื่อสร้างความลับ mfa ที่คุณเพิ่มลงในการกำหนดค่าผู้ใช้ที่มีอยู่ตัวอย่างเช่น:
{
"apps" : [{ "..." : " ... " }],
"users" : [
{
"user" : " user1 " ,
"pass" : " pass " ,
"mfa" : " lmvmOIZGMTQklhOIhveqkumss "
}
]
} Parse Dashboard เป็นไปตามมาตรฐานอุตสาหกรรมและสนับสนุนอัลกอริทึม OTP ทั่วไป SHA-1 โดยค่าเริ่มต้นเพื่อเข้ากันได้กับแอพ Authenticator ส่วนใหญ่ หากคุณมีข้อกำหนดด้านความปลอดภัยเฉพาะเกี่ยวกับคุณสมบัติ 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
} ) ; ตรวจสอบให้แน่ใจว่าคุณระบุ 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 ได้อย่างเดียว
ตรวจสอบให้แน่ใจว่าคุณระบุ 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 จะถูกส่งผ่านเป็นอาร์กิวเมนต์ไปยังจุดเข้าใช้เพื่อสร้างคำสั่งเต็มคำสั่ง npm start -- --port 8080 แอปพลิเคชันจะเริ่มต้นที่พอร์ต 8080 ภายในคอนเทนเนอร์และพอร์ต 8080 จะถูกติดตั้งกับพอร์ต 80 บนเครื่องโฮสต์ของคุณ
(ต่อไปนี้ไม่ใช่รายการคุณสมบัติที่สมบูรณ์ แต่เป็นงานที่กำลังดำเนินการเพื่อสร้างรายการคุณสมบัติที่ครอบคลุม)
กล่องโต้ตอบตัวกรองอนุญาตให้เพิ่มเงื่อนไขตัวกรองเชิงสัมพันธ์ตามคลาสอื่น ๆ ที่มีตัวชี้ไปยังคลาสปัจจุบัน
ตัวอย่างเช่นผู้ใช้ในคลาส _User อาจมี:
Purchase ด้วยฟิลด์ตัวชี้ _UserPayment ด้วยฟิลด์ตัวชี้ _Userตัวกรองเชิงสัมพันธ์ช่วยให้คุณกรองผู้ใช้ทั้งหมดที่:
Purchase )Payment ) หากต้องการใช้ตัวกรองดังกล่าวเพียงไปที่คลาส _User และเพิ่มเงื่อนไขตัวกรองที่จำเป็นสองอย่างด้วยคลาส Purchase และ Payment
เบราว์เซอร์ข้อมูลมีแผงข้อมูลที่สามารถแสดงข้อมูลที่เกี่ยวข้องกับวัตถุที่เลือกในปัจจุบันในตารางเบราว์เซอร์ข้อมูล แผงข้อมูลสามารถมองเห็นได้โดยคลิกที่ปุ่มเมนู แสดงแผงหน้าปัด ที่มุมขวาบนเมื่อเรียกดูคลาสที่กำหนดค่าแผงข้อมูลในตัวเลือกแดชบอร์ด
ตัวอย่างการกำหนดค่าแดชบอร์ดต่อไปนี้แสดงแผงข้อมูลสำหรับคลาส _User ที่มี User Details ชื่อโดยเรียกฟังก์ชันคลาวด์รหัส 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 จะถูกเพิ่มไปที่ด้านบนของไฟล์ที่ตรงกับชื่อคอลัมน์
ขณะนี้มีการ จำกัด 10,000 แถวเมื่อส่งออกข้อมูลทั้งหมด หากมีมากกว่า 10,000 แถวในชั้นเรียนไฟล์ CSV จะมี 10,000 แถวเท่านั้น
เราต้องการให้แยกวิเคราะห์เป็นของคุณเพื่อดูว่ามันเติบโตและเจริญเติบโตในชุมชนโอเพ่นซอร์ส โปรดดูคู่มือแผงควบคุมการแยกวิเคราะห์
ณ วันที่ 5 เมษายน 2017 Parse, LLC ได้โอนรหัสนี้ไปยังองค์กรการแยกวิเคราะห์ชุมชนและจะไม่มีส่วนร่วมหรือแจกจ่ายรหัสนี้อีกต่อไป