TurboGears - प्राधिकरण और प्रमाणीकरण

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

निम्नलिखित मॉडल ओरेकल में घोषित किए गए हैं -

उपयोगकर्ता मॉडल

उपयोगकर्ता मॉडल में tg_user तालिका का डिज़ाइन है। इस तालिका का उपयोग रिपॉज.हो पैकेज द्वारा किया जाता है। यह repose.who पैकेज एक शक्तिशाली और साथ ही WSGI अनुप्रयोगों के लिए एक एक्स्टेंसिबल प्रमाणीकरण पुस्तकालय है। उपयोगकर्ता मॉडल की संरचना इस प्रकार है -

class User(DeclarativeBase):

"""
   __tablename__ = 'tg_user'
   
   user_id = Column(Integer, autoincrement = True, primary_key=True)
   user_name = Column(Unicode(16), unique = True, nullable = False)
   email_address = Column(Unicode(255), unique = True,nullable=False)
                                             
   display_name = Column(Unicode(255))
   _password = Column('password', Unicode(128))
   created = Column(DateTime, default = datetime.now)

इस समूह के मॉडल में परिभाषा tg_group तालिका है। इसकी परिभाषा ओडिशा के रूप में दी गई है -

class Group(DeclarativeBase):
   __tablename__ = 'tg_group'
   
   group_id = Column(Integer, autoincrement = True,primary_key = True)
   group_name = Column(Unicode(16),unique = True,nullable = False)
   display_name = Column(Unicode(255))
   created = Column(DateTime, default = datetime.now)

एक अन्य मॉडल अनुमति भी स्थापित की गई है, जिसमें अनुमति परिभाषा शामिल है।

class Permission(DeclarativeBase):
   __tablename__ = 'tg_permission'
   
   permission_id = Column(Integer,autoincrement = True,primary_key = True)
   permission_name = Column(Unicode(63), unique = True, nullable = False)
   description = Column(Unicode(255))

मॉडल स्थापित करने के समय, निम्न डेटा इन तालिकाओं में जोड़ा जाता है -

u = model.User()
u.user_name = 'manager'
u.display_name = 'Example manager'
u.email_address = '[email protected]'
u.password = 'managepass'

model.DBSession.add(u)
g = model.Group()
g.group_name = 'managers'
g.display_name = 'Managers Group'
g.users.append(u)

model.DBSession.add(g)
p = model.Permission()
p.permission_name = 'manage'
p.description = 'This permission gives an administrative right'
p.groups.append(g)

model.DBSession.add(p)
u1 = model.User()
u1.user_name = 'editor'
u1.display_name = 'Example editor'
u1.email_address = '[email protected]'
u1.password = 'editpass'

model.DBSession.add(u1)

मॉडल को समर्पित करें

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

यदि कोई उपयोगकर्ता लॉग इन नहीं है, या उसके पास उचित अनुमतियां नहीं हैं, तो यह प्रेडेटेट चेकर एक 401 (HTTP अनधिकृत) फेंकता है, जो उपयोगकर्ता को लॉग इन करने की अनुमति देते हुए लॉगिन पेज प्रदर्शित करने के लिए repoze.who मिडलवेयर द्वारा पकड़ा जाता है और रीडायरेक्ट करता है। जब वे किए जाते हैं तो उपयोगकर्ता उचित पृष्ठ पर वापस आ जाता है।

Tg.predicates मॉड्यूल में परिभाषित विभिन्न स्थितियाँ या विधेय हैं -

अनु क्रमांक। tg.predicates मॉड्यूल और विवरण
1

All

जांचें कि क्या निर्दिष्ट सभी विधेय पूर्ण हुए हैं

2

Any

जाँच करें कि क्या कम से कम एक निर्दिष्ट विधेय मिलते हैं

3

is_user

जांचें कि प्रमाणित उपयोगकर्ता का उपयोगकर्ता नाम निर्दिष्ट है

4

in_group

जांचें कि उपयोगकर्ता विशिष्ट समूह से संबंधित है।

5

in_all_groups

जांचें कि उपयोगकर्ता सभी निर्दिष्ट समूहों से संबंधित है।

6

in_any_group

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

7

is_anonymous

जांचें कि वर्तमान उपयोगकर्ता अनाम है।

8

has_permission

जांचें कि वर्तमान उपयोगकर्ता के पास निर्दिष्ट अनुमति है।

9

has_all_permissions

जांचें कि वर्तमान उपयोगकर्ता को सभी निर्दिष्ट अनुमतियाँ दी गई हैं।

10

has_any_permission

जाँच लें कि उपयोगकर्ता के पास कम से कम एक निर्दिष्ट अनुमतियाँ हैं।

उदाहरण के लिए, यदि आपके पास एक विधेय है, जो है grant access user belonging to customers group, तो आप निम्नलिखित अंतर्निहित जांचकर्ता का उपयोग कर सकते हैं -

from tg.predicates import in_group
p in_group(‘customers’)

निम्नलिखित विधेय परीक्षक 'रूट' उपयोगकर्ता या 'प्रबंधन' की अनुमति के साथ किसी को भी पहुंच प्रदान करेगा -

from tg.predicates import Any, is_user, has_permission
p = Any(is_user('root'), has_permission('manage'), 
   sg = 'Only administrators can remove blog posts')