के साथ प्रमाणीकरण और अभिगम नियंत्रण फेसबुक की आधिकारिक रेखा यह है कि रिले "intentionally agnostic about authentication mechanisms" है। रिले भंडार में सभी उदाहरणों में, प्रमाणीकरण और अभिगम नियंत्रण एक अलग चिंता है। प्रैक्टिस में, मुझे इस अलगाव को लागू करने का एक आसान तरीका नहीं मिला है।रिले
रिले रिपोजिटरी में दिए गए उदाहरणों में सभी viewer
फ़ील्ड के साथ रूट स्कीमा हैं जो मानते हैं कि एक उपयोगकर्ता है। और उस उपयोगकर्ता के पास सबकुछ तक पहुंच है।
हालांकि, वास्तव में, एक एप्लिकेशन में कई उपयोगकर्ता हैं और प्रत्येक उपयोगकर्ता के पास प्रत्येक नोड तक पहुंच की विभिन्न डिग्री होती है।
मान लीजिए मैं जावास्क्रिप्ट में इस स्कीमा है:
export const Schema = new GraphQLSchema({
query: new GraphQLObjectType({
name: 'Query',
fields:() => ({
node: nodeField,
user: {
type: new GraphQLObjectType({
name: 'User',
args: {
// The `id` of the user being queried for
id: { type: new GraphQLNonNull(GraphQLID) },
// Identity the user who is querying
session: { type: new GraphQLInputObjectType({ ... }) },
},
resolve: (_, { id, session }) => {
// Given `session, get user with `id`
return data.getUser({ id, session });
}
fields:() => ({
name: {
type: GraphQLString,
resolve: user => {
// Does `session` have access to this user's
// name?
user.name
}
}
})
})
}
})
})
});
कुछ उपयोगकर्ताओं क्वेरी उपयोगकर्ता के नजरिए से पूरी तरह से निजी हैं। अन्य उपयोगकर्ता केवल कुछ फ़ील्ड को क्वेरीिंग उपयोगकर्ता को बेनकाब कर सकते हैं। तो उपयोगकर्ता को प्राप्त करने के लिए, क्लाइंट को केवल उस उपयोगकर्ता आईडी को प्रदान नहीं करना चाहिए जिसके लिए वे पूछताछ कर रहे हैं, लेकिन उन्हें स्वयं को भी पहचानना चाहिए ताकि अभिगम नियंत्रण हो सके।
ऐसा लगता है कि ग्राफ के नीचे पहुंच ट्रिकल्स को नियंत्रित करने की आवश्यकता के रूप में जल्दी से जटिल हो जाता है।
इसके अलावा, मुझे nodeField
जैसे प्रत्येक रूट क्वेरी के लिए एक्सेस को नियंत्रित करने की आवश्यकता है। मुझे यह सुनिश्चित करने की ज़रूरत है कि nodeInterface
लागू करने वाले प्रत्येक नोड।
यह सब दोहराए जाने वाले काम की तरह लगता है। क्या इसे सरल बनाने के लिए कोई ज्ञात पैटर्न हैं? क्या मैं इस बारे में गलत तरीके से सोच रहा हूं?
का उपयोग कर एक कुकी में सत्र डेटा (उपयोगकर्ता आईडी और भूमिका) बचाता है, मुझे लगता है कि अगर वास्तव में निष्पादन इंजन के ऊपर बैठे रिले में कुछ मिडलवेयर था और सत्र जानकारी के आधार पर प्रश्नों को फिर से लिखना होगा तो यह वास्तव में अच्छा होगा। । –
क्या आपको कभी अच्छा उदाहरण/उत्तर मिला? मैं रिले के साथ टोकन प्रमाणीकरण (कोई सत्र) पर जानकारी की तलाश में हूं लेकिन –
@ ग्रीनरेल कुछ भी नहीं ढूंढना मुश्किल है लेकिन मुझे पता चला कि इसे कैसे किया जाए। यह बहुत अच्छा है! असल में मेरे लिए कुंजी यह पता लगाना था कि आप चीजों को ग्राफक्लुएल "रूटवैल्यू" में डाल सकते हैं, जो संकल्प के सभी स्तरों पर उपलब्ध है। यदि आप एक्सप्रेस मिडलवेयर का उपयोग कर रहे हैं, तो ऐसा किया जाता है: https://gist.github.com/dminkovsky/3df6a8b0ebf6f14b2c10#file-gistfile1-txt-L143-L152। किसी भी कार्यान्वयन के लिए भी किया जा सकता है। फिर, नीचे दिए गए उत्तर के अनुसार, आप एसीएल में सहायता के लिए डेटा लोड करने के लिए 'दर्शक-उन्मुख' दृष्टिकोण भी ले सकते हैं। https://github.com/facebook/dataloader एक अच्छा सहायक उपकरण है। –