TurboGears - Yetkilendirme ve Kimlik Doğrulama
Yetkilendirme ve kimlik doğrulama desteği varsayılan olarak etkinleştirilmiş olan dişli kutusu araç setinin hızlı başlangıç ve kurulum uygulaması seçenekleriyle bir TurboGears uygulaması oluşturulur. Auth.py'de bildirilen modeller, bootstrap.py'de atanan değerlere göre ayarlanır ve başlatılır.
Aşağıdaki modeller auth.py'de bildirilmiştir -
Kullanıcı Modeli
Kullanıcı modeli, bir tg_user tablosunun tasarımını içerir. Bu tablo, repose.who paketi tarafından kullanılır. Bu repose.who paketi, WSGI uygulamaları için hem güçlü hem de genişletilebilir bir kimlik doğrulama kitaplığıdır. Bir kullanıcı modelinin yapısı aşağıdaki gibidir -
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)
Bu grup modeli tg_group tablosu tanımını içerir. Tanımı, auth.py'de aşağıdaki gibi verilmiştir -
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)
İzin tanımını içeren başka bir model izni de ayarlanır.
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))
Modellerin kurulumu sırasında, bu tablolara aşağıdaki veriler eklenir -
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)
Dayanak Modeli
Tg paketindeki yüklemler modülü, yüklem denetleyicileri için tanımları içerir. Koşul, kullanıcının istenen kaynağa erişebilmesi için karşılanması gereken bir koşuldur. Böyle bir yüklem veya koşul, daha fazla yüklemden oluşabilir - bunlara bileşik yüklemler denir. Eylem denetleyicileri veya denetleyiciler, ister tek ister bileşik olsun, yalnızca bir koşula sahip olabilir.
Bir kullanıcı oturum açmamışsa veya uygun izinlere sahip değilse, bu doğrulama denetleyicisi, kullanıcının oturum açmasına izin veren oturum açma sayfasını görüntülemek için repoze.who ara yazılımı tarafından yakalanan bir 401 (HTTP Yetkilendirilmemiş) atar ve Kullanıcı, tamamlandığında uygun sayfaya geri döner.
Tg.predicates modülünde tanımlanan farklı koşullar veya yüklemler şunlardır:
Sr.No. | tg.predicates modülü ve açıklaması |
---|---|
1 | All Belirtilen tüm koşulların karşılanıp karşılanmadığını kontrol edin |
2 | Any Belirtilen koşullardan en az birinin karşılanıp karşılanmadığını kontrol edin |
3 | is_user Kimliği doğrulanan kullanıcının kullanıcı adının belirtilen ad olduğunu kontrol edin |
4 | in_group Kullanıcının belirli bir gruba ait olduğunu kontrol edin. |
5 | in_all_groups Kullanıcının belirtilen tüm gruplara ait olduğunu kontrol edin. |
6 | in_any_group Kullanıcının belirtilen gruplardan en az birine ait olduğunu kontrol edin. |
7 | is_anonymous Mevcut kullanıcının anonim olup olmadığını kontrol edin. |
8 | has_permission Mevcut kullanıcının belirtilen izne sahip olup olmadığını kontrol edin. |
9 | has_all_permissions Geçerli kullanıcıya belirtilen tüm izinlerin verildiğini kontrol edin. |
10 | has_any_permission Kullanıcının belirtilen izinlerden en az birine sahip olup olmadığını kontrol edin. |
Örneğin, bir yükleminiz varsa grant access user belonging to customers group, ardından aşağıdaki yerleşik yüklem denetleyicisini kullanabilirsiniz -
from tg.predicates import in_group
p in_group(‘customers’)
Aşağıdaki yüklem denetleyicisi, 'kök' kullanıcıya veya 'yönetme' iznine sahip herhangi birine erişim sağlayacaktır -
from tg.predicates import Any, is_user, has_permission
p = Any(is_user('root'), has_permission('manage'),
sg = 'Only administrators can remove blog posts')