सामान्यतः, वे सभी समान हैं लेकिन उनमें से कुछ के मुकाबले अधिक सुविधाएं हैं। उदाहरण के लिए, फ्लास्क-सुरक्षा बहुत अधिक सुरक्षा सुविधाओं जैसे एन्क्रिप्शन अतिरिक्त के साथ बहुत भारी है। वास्तव में, फ्लास्क-सिक्योरिटी में फ्लास्क-प्रिंसिपल को सबसेट के रूप में शामिल किया गया है। फ्लास्क-प्रिंसिपल फ्लास्क-लॉग इन का उपयोग ऑथ के लिए कर सकता है, भले ही यह सिर्फ एक विकल्प है। तो आप देख सकते हैं कि वे सभी संबंधित हैं लेकिन कुछ एक दूसरे के सबसेट या सुपरसेट हैं।
अब आपके विशिष्ट मामले में, आप पहले से ही फ्लास्क-लॉगिन का उपयोग कर रहे हैं जो उत्कृष्ट है। यदि आपको उपयोगकर्ता भूमिकाएं जोड़ने की आवश्यकता है जो फ्लास्क-लॉगिन समर्थित नहीं है, तो मैं अनुशंसा करता हूं कि आप भूमिका उपयोगकर्ता कॉलम जोड़ने के लिए अपना उपयोगकर्ता मॉडल बढ़ाएं और फिर 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