Web2py - अभिगम नियंत्रण

प्रमाणीकरण

लगभग हर एप्लिकेशन को उपयोगकर्ताओं को प्रमाणित करने और अनुमतियां सेट करने में सक्षम होना चाहिए। web2py एक व्यापक और अनुकूलन योग्य भूमिका-आधारित अभिगम नियंत्रण के साथ आता हैmechanism.web2py। यह प्रोटोकॉल का भी समर्थन करता है, जैसे कि CAS, OpenID, OAuth 1.0, LDAP, PAM, X509, और कई और।

web2py में रोल बेस्ड एक्सेस कंट्रोल मैकेनिज्म (RBAC) के रूप में जाना जाने वाला एक तंत्र शामिल है जो अधिकृत उपयोगकर्ताओं के लिए सिस्टम एक्सेस को प्रतिबंधित करने के लिए एक दृष्टिकोण है। R2AC को लागू करने वाले web2py वर्ग को Auth कहा जाता है।

नीचे दिए गए स्कीमा को देखें।

Auth निम्नलिखित तालिकाओं को परिभाषित करता है -

अनु क्रमांक तालिका का नाम और विवरण
1

auth_user

उपयोगकर्ताओं का नाम, ईमेल पता, पासवर्ड और स्थिति संग्रहीत करता है।

2

auth_group

कई-कई संरचना में उपयोगकर्ताओं के लिए समूह या भूमिकाएं संग्रहीत करता है

3

auth_membership

कई-कई संरचना में लिंक उपयोगकर्ताओं और समूहों की जानकारी संग्रहीत करता है

4

auth_permission

तालिका समूहों और अनुमतियों को जोड़ती है।

5

auth_event

लॉग अन्य तालिकाओं में परिवर्तन और सफल पहुँच

6

auth_cas

इसका उपयोग Central Authentication Service के लिए किया जाता है

प्रामाणिक बनाना

Auth को कस्टमाइज़ करने के दो तरीके हैं।

  • एक प्रथा को परिभाषित करने के लिए db.auth_user खरोंच से तालिका।

  • Web2py को परिभाषित करने दें auth तालिका।

हमें परिभाषित करने की अंतिम विधि पर नजर डालते हैं authतालिका। मेंdb.py मॉडल, निम्नलिखित पंक्ति को बदलें -

auth.define_tables()

इसे निम्नलिखित कोड से बदलें -

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}')),
   Field('address','text')
]

auth.define_tables(username = True)

धारणा यह है कि प्रत्येक उपयोगकर्ता में फोन नंबर, उपयोगकर्ता नाम और पता होता है।

auth.settings.extra_fieldsअतिरिक्त क्षेत्रों का एक शब्दकोश है। कुंजी उस तालिका का नाम है जिसमें अतिरिक्त फ़ील्ड जोड़ना है। मान अतिरिक्त फ़ील्ड्स की एक सूची है। यहां, हमने दो अतिरिक्त फ़ील्ड जोड़े हैं,phone_number and address

usernameएक विशेष तरीके से इलाज किया जाना है, क्योंकि यह प्रमाणीकरण प्रक्रिया में शामिल है, जो सामान्य रूप से ईमेल क्षेत्र पर आधारित है। निम्नलिखित पंक्ति में उपयोगकर्ता नाम तर्क पास करके, यह web2py को सूचित किया जाता है कि हम उपयोगकर्ता नाम फ़ील्ड चाहते हैं, और हम इसे ईमेल फ़ील्ड के बजाय लॉगिन के लिए उपयोग करना चाहते हैं। यह एक प्राथमिक कुंजी की तरह कार्य करता है।

auth.define_tables(username = True)

उपयोगकर्ता नाम एक अद्वितीय मान के रूप में माना जाता है। ऐसे मामले हो सकते हैं जब पंजीकरण सामान्य पंजीकरण फॉर्म के बाहर होता है। ऐसा भी होता है, कि नए उपयोगकर्ता को अपना पंजीकरण पूरा करने के लिए लॉगिन करने के लिए मजबूर किया जाता है।

यह डमी क्षेत्र का उपयोग करके किया जा सकता है, complete_registration यह निर्धारित है False डिफ़ॉल्ट रूप से, और इसके लिए सेट है True जब वे अपना प्रोफ़ाइल अपडेट करते हैं।

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}'),
   comment = "i.e. 123-123-1234"),
   Field('address','text'),
   Field('complete_registration',default = False,update = True,
   writable = False, readable = False)
]

auth.define_tables(username = True)

यह परिदृश्य नए उपयोगकर्ताओं को, अपना पंजीकरण पूरा करने के लिए, लॉगिन करने पर दे सकता है।

में db.py, मॉडल फ़ोल्डर में, हम निम्नलिखित कोड जोड़ सकते हैं -

if auth.user and not auth.user.complete_registration:
if not (request.controller,request.function) == ('default','user'):
   redirect(URL('default','user/profile'))

यह नए उपयोगकर्ताओं को उनकी प्रोफ़ाइल को आवश्यकतानुसार संपादित करने के लिए बाध्य करेगा।

प्राधिकार

यह कुछ एक्सेस देने या उपयोगकर्ताओं को कुछ की अनुमति देने की प्रक्रिया है।

Web2py में एक बार नया उपयोगकर्ता बनाने या पंजीकृत होने के बाद, उपयोगकर्ता को शामिल करने के लिए एक नया समूह बनाया जाता है। नए उपयोगकर्ता की भूमिका को पारंपरिक रूप से कहा जाता है“user_[id]” जहां आईडी उपयोगकर्ता की विशिष्ट पहचान है।

नए समूह के निर्माण का डिफ़ॉल्ट मान है -

auth.settings.create_user_groups = "user_%(id)s"

उपयोगकर्ताओं के बीच समूहों का निर्माण अक्षम किया जा सकता है -

auth.settings.create_user_groups = None

रचना, विशेष सदस्यों तक पहुंच प्रदान करना और एप्लिकेशनडैमिन की मदद से भी प्रोग्रामेटिक रूप से अनुमति प्राप्त की जा सकती है।

कुछ कार्यान्वयन इस प्रकार हैं -

अनु क्रमांक कमांड और उपयोग
1

auth.add_group('role', 'description')

नए बनाए गए समूह की आईडी लौटाता है।

2

auth.del_group(group_id)

निर्दिष्ट आईडी के साथ समूह को हटाता है

3

auth.del_group(auth.id_group('user_7'))

दिए गए पहचान के साथ उपयोगकर्ता समूह को हटाता है।

4

auth.user_group(user_id)

दिए गए उपयोगकर्ता के लिए विशिष्ट रूप से संबद्ध समूह की आईडी का मूल्य लौटाता है।

5

auth.add_membership(group_id, user_id)

दिए गए group_id के लिए user_id का मान लौटाता है

6

auth.del_membership(group_id, user_id)

दिए गए सदस्य की पहुंच को फिर से खोलता है अर्थात दिए गए समूह से user_id।

7

auth.has_membership(group_id, user_id, role)

जाँचता है कि क्या user_id दिए गए समूह का है।

केंद्रीय प्रमाणीकरण सेवा (CAS)

web2py एक उद्योग मानक प्रदान करता है जिसका नाम है, क्लाइंट ऑथेंटिकेशन सर्विस - ग्राहक और सर्वर दोनों के लिए CAS-in web2py। यह एक थर्ड पार्टी ऑथेंटिकेशन टूल है।

यह वितरित प्रमाणीकरण के लिए एक खुला प्रोटोकॉल है। CAS का काम इस प्रकार है -

  • यदि उपयोगकर्ता वेबसाइट पर जाता है, तो प्रोटोकॉल जांचता है कि उपयोगकर्ता प्रमाणित है या नहीं।

  • यदि उपयोगकर्ता अनुप्रयोग के लिए प्रमाणित नहीं है, तो प्रोटोकॉल उस पृष्ठ पर पुनर्निर्देशित करता है जहां उपयोगकर्ता पंजीकरण कर सकता है या आवेदन में लॉग इन कर सकता है।

  • यदि पंजीकरण पूरा हो गया है, तो उपयोगकर्ता एक ईमेल प्राप्त करता है। जब तक उपयोगकर्ता ईमेल सत्यापित नहीं करता है, तब तक पंजीकरण पूरा नहीं होता है।

  • सफल पंजीकरण के बाद, उपयोगकर्ता को कुंजी के साथ प्रमाणित किया जाता है, जिसका उपयोग सीएएस उपकरण द्वारा किया जाता है।

  • कुंजी का उपयोग HTTP अनुरोध के माध्यम से उपयोगकर्ता के क्रेडेंशियल्स प्राप्त करने के लिए किया जाता है, जो पृष्ठभूमि में सेट किया गया है।