2016-01-15 10 views
7

पृष्ठभूमि:ग्राफ़क्यूएल सर्वर में एक्सेस कंट्रोल को लागू करने के लिए एक अच्छा पैटर्न क्या है?

मैं एक उपयोगकर्ता और विभिन्न अन्य मॉडल, जिनमें से कुछ एक उपयोगकर्ता के संदर्भ हो सहित मॉडल का एक सेट, की है। मैं graffiti-mongoose एडाप्टर का उपयोग कर एक मोंगो डेटाबेस द्वारा समर्थित Graffiti द्वारा उत्पन्न ग्राफक्लु एपीआई के माध्यम से पूछताछ के लिए इन मॉडलों का खुलासा कर रहा हूं। मेरा वर्तमान आरईएसटी एपीआई (जिसे मैं ग्राफ़क्यूएल में माइग्रेट कर रहा हूं) उपयोगकर्ताओं को प्रमाणीकृत करने के लिए जेएसओएन वेब टोकन का उपयोग करता है, और एक्सेस कंट्रोल को संभालने के लिए सर्वर पक्ष पर कुछ कस्टम अनुमति तर्क है।

समस्या:

मैं GraphQL में वस्तुओं वर्तमान में लॉग-इन उपयोगकर्ता के आधार पर करने के लिए उपयोग को सीमित करना चाहते हैं। कुछ मॉडलों को अनधिकृत कॉल द्वारा पढ़ने के लिए सुलभ होना चाहिए। अधिकांश अन्य मॉडल केवल उस उपयोगकर्ता के लिए सुलभ होना चाहिए जिसने उन्हें बनाया है। Graffiti- जेनरेट एपीआई के माध्यम से वस्तुओं पर अभिगम नियंत्रण का प्रबंधन करने का सबसे अच्छा तरीका क्या है?

सामान्य रूप से, क्या ग्राफ़क्यूएल के लिए एक्सेस कंट्रोल के अच्छे पैटर्न हैं? और विशेष रूप से, क्या ग्राफिटी के साथ ऐसा करने के लिए कोई अच्छा उदाहरण या पुस्तकालय हैं?

नोट्स:

मैं समझता हूँ कि पूर्व और पोस्ट हुक भित्तिचित्र-नेवला के लिए been implemented है, और वे can be used प्रमाणीकरण के लिए बुनियादी द्विआधारी चेकों करने के लिए कि। मैं देखना चाहता हूं कि ग्राफक्लु एपीआई में अधिक विस्तृत एक्सेस-कंट्रोल लॉजिक कैसे काम किया जा सकता है। भविष्य में, हम उन प्रशासकों की तरह समर्थन करना चाहेंगे जिनके पास उपयोगकर्ताओं के एक निश्चित समूह द्वारा बनाए गए मॉडल उदाहरणों तक पहुंच है (उदा। उपयोगकर्ता जिनके संबद्धों में प्रशासक शामिल हैं)।

+0

आपको एक्सएसीएमएल और एबीएसी में देखना चाहिए जो कि अच्छी तरह से दागदार विशेषता आधारित एक्सेस कंट्रोल मॉडल हैं जिनका उपयोग आप ग्राफक्लुएल और अन्य ऐप्स –

उत्तर

9

आमतौर पर ग्राफक्लुएल सीधे उस नियंत्रण को नियंत्रित नहीं करता है, जो उस डेटा को जो भी डेटा सिस्टम इंटरफेस करता है, उस जिम्मेदारी को प्रस्तुत करता है। आपके मामले में जो मोंगोस की तरह लगता है।

चूंकि एक्सेस कंट्रोल तर्क अक्सर मनमाने ढंग से तर्क होता है (उदाहरण के लिए, क्या इस उपयोगकर्ता को कुछ सामग्री से प्रतिबंधित कर दिया गया है? क्या उस सामग्री के प्रकाशक ने इसे कस्टम गोपनीयता सेटिंग्स से प्रतिबंधित कर दिया है?), और यह आपके मामले में ऐसा लगता है एक्सेस कंट्रोल लॉजिक वास्तव में कस्टम है, इसे "संकल्प" फ़ंक्शन में रहना चाहिए जो ग्राफ़क्लुएल फ़ील्ड के लिए मान उत्पन्न करता है।

उदाहरण के लिए:

var UserType = new GraphQLObjectType({ 
    name: 'User', 
    fields: { 
    name: { type: GraphQLString }, 
    birthday: { 
     type: GraphQLString, 
     resolve(user, context) { 
     var auth = context.myLoggedInAuth; 
     if (myCanAuthSeeBirthday(auth, user)) { 
      return user.birthday; 
     } 
     } 
    } 
    } 
}); 
+2

को सुरक्षित करने के लिए कर सकते हैं, इससे आपके प्रोजेक्ट के दायरे के आधार पर अनावश्यक कोड हो सकता है। यह स्वयं संकल्पकों से डी-युग्मन प्राधिकरण पर आधिकारिक रुख है http://graphql.org/learn/authorization/ – medv

2

मैं एक नियम के आधार अभिगम नियंत्रण बनाने GraphQL साथ प्रयोग किया जा करने के लिए।

https://github.com/joonhocho/graphql-rule

यह सरल है और unopionated है कि यह साथ या GraphQL बिना इस्तेमाल किया जा सकता।

आप इसे एक सादे जावास्क्रिप्ट ऑब्जेक्ट्स के साथ उपयोग कर सकते हैं।

उम्मीद है कि यह ग्राफक्लुर्स की सहायता करता है!

+0

आप देखना चाहते हैं [व्यक्तिगत ओपन-सोर्स लाइब्रेरी कैसे पेश करें?] (https://meta.stackexchange.com/q/229085) –

+0

धन्यवाद। इस तरह के नियमों को भी नहीं पता था। – Joon

संबंधित मुद्दे