2013-06-26 7 views
10

क्या कोई बता सकता है कि इन 3 एक्सटेंशन के बीच कोई मौलिक अंतर है या क्या वे सभी समान काम करते हैं? मैं दस्तावेज़ पढ़ रहा हूं और ऐसा लगता है कि काफी सारे क्रॉसओवर हैं। मैं अनुमान लगा रहा हूं कि कुछ और अधिक सुविधाएं प्रदान करते हैं।फ्लास्क-ऑथ, प्रिंसिपल और फ्लास्क सुरक्षा

मैं अपने ऐप में उपयोगकर्ता भूमिकाएं जोड़ना चाहता हूं ताकि कुछ उपयोगकर्ताओं को कुछ अनुमति हो। यानी स्तर 1 उपयोगकर्ता 5 संसाधन बना सकता है, स्तर 2 उपयोगकर्ता 10 बना सकता है। मैं अपना खुद का रोलिंग देख रहा हूं, यह बहुत मुश्किल नहीं लग रहा है। मैं इस समाधान के साथ http://flask.pocoo.org/snippets/98/ की लाइनों के साथ एक सजावट का उपयोग कर रहा हूं क्या इस समाधान के साथ कोई सुरक्षा समस्या होगी? मैं पहले से ही फ्लास्क-लॉगिन का उपयोग कर रहा हूं इसलिए मैं इसे इसके साथ एकीकृत कर दूंगा।

उत्तर

15

फ्लास्क-एथ प्रमाणीकरण और अनुमति दोनों के लिए एक ही समाधान है, लेकिन मैंने इसे अधिक इस्तेमाल/संदर्भित नहीं देखा है।

फ्लास्क-प्रिंसिपल जो भी आप चाहते हैं वह करेगा, लेकिन यह बहुत नंगे हड्डियों है; अपना खुद का रोलिंग करना ज्यादा काम नहीं करेगा।

फ्लास्क-सुरक्षा फ्लास्क-लॉगिन, प्रिंसिपल, और कुछ अन्य एक्सटेंशन को अधिक सुसंगत रूप में रोल करता है, उन्हें निर्भरता के रूप में स्थापित करता है। जब संभव हो तो अलग-अलग एक्सटेंशन से लोगों की बजाय प्रदान की जाने वाली विधियों का उपयोग करें। मैंने इसका इस्तेमाल नहीं किया है, लेकिन ऐसा लगता है कि इसमें से मैन्युअल श्रम बहुत अधिक होगा।

उपयोगकर्ता भूमिकाओं को जोड़ने की आवश्यकता के आपके विशिष्ट उपयोग मामले के लिए, मैं फ्लास्क-प्रिंसिपल के साथ चिपकने की सलाह दूंगा। यह अच्छी तरह से काम करता है, बनाए रखा जाता है, और आपके पास जो भी आवश्यकताओं के साथ एकीकृत करने के लिए पर्याप्त सामान्य है।

4

सामान्यतः, वे सभी समान हैं लेकिन उनमें से कुछ के मुकाबले अधिक सुविधाएं हैं। उदाहरण के लिए, फ्लास्क-सुरक्षा बहुत अधिक सुरक्षा सुविधाओं जैसे एन्क्रिप्शन अतिरिक्त के साथ बहुत भारी है। वास्तव में, फ्लास्क-सिक्योरिटी में फ्लास्क-प्रिंसिपल को सबसेट के रूप में शामिल किया गया है। फ्लास्क-प्रिंसिपल फ्लास्क-लॉग इन का उपयोग ऑथ के लिए कर सकता है, भले ही यह सिर्फ एक विकल्प है। तो आप देख सकते हैं कि वे सभी संबंधित हैं लेकिन कुछ एक दूसरे के सबसेट या सुपरसेट हैं।

अब आपके विशिष्ट मामले में, आप पहले से ही फ्लास्क-लॉगिन का उपयोग कर रहे हैं जो उत्कृष्ट है। यदि आपको उपयोगकर्ता भूमिकाएं जोड़ने की आवश्यकता है जो फ्लास्क-लॉगिन समर्थित नहीं है, तो मैं अनुशंसा करता हूं कि आप भूमिका उपयोगकर्ता कॉलम जोड़ने के लिए अपना उपयोगकर्ता मॉडल बढ़ाएं और फिर login_required सजावट को ओवरराइट करें। यदि आप फ्लास्क-सिक्योरिटी इत्यादि जैसे एक्सटेंशन का उपयोग करने का प्रयास करते हैं, तो यह आपकी स्थिति में अधिक हो सकता है।

उदाहरण के तौर पर, मैं अपनी उपयोगकर्ता कक्षा को भूमिका क्षेत्र के साथ विस्तारित करूंगा। इसमें "कोई भी", "व्यवस्थापक" आदि हो सकते हैं। किसी भी तरह से कोई फर्क नहीं पड़ता।

class User(UserMixin): 
    def get_role(): 
     return rolename 

मैं तो के रूप में login_required डेकोरेटर के ऊपर लिख देगा:

def login_required(role="ANY"): 
    def wrapper(fn): 
     @wraps(fn) 
     def decorated_view(*args, **kwargs): 

      if not current_user.is_authenticated(): 
       return current_app.login_manager.unauthorized() 

      urole = current_user.get_role() 
      if ((urole != role) and (role != "ANY")): 
        logout_user() 
        return current_app.login_manager.unauthorized()  
      return fn(*args, **kwargs) 
     return decorated_view 
    return wrapper 
संबंधित मुद्दे