TurboGears - Otorisasi & Otentikasi

Aplikasi TurboGears dibuat dengan opsi quickstart dan setup-app dari gearbox toolkit, yang memiliki otorisasi dan dukungan otentikasi diaktifkan secara default. Model yang dideklarasikan dalam auth.py diatur dan diinisialisasi sesuai nilai yang ditetapkan dalam bootstrap.py.

Model berikut dideklarasikan di auth.py -

Model Pengguna

Model User berisi desain tabel tg_user. Tabel ini digunakan oleh paket repose.who. Paket repose.who ini adalah pustaka otentikasi yang andal dan dapat diperluas untuk aplikasi WSGI. Struktur model pengguna adalah sebagai berikut -

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)

Model grup ini berisi definisi tabel tg_group. Definisinya diberikan di auth.py sebagai berikut -

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)

Izin model lain juga disiapkan, yang berisi definisi izin.

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))

Pada saat menyiapkan model, data berikut ditambahkan dalam tabel ini -

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)

Model Predikat

Modul predikat dalam paket tg berisi definisi untuk pemeriksa predikat. Predikat adalah syarat yang harus dipenuhi agar pengguna dapat mengakses sumber yang diminta. Predikat atau kondisi seperti itu dapat terdiri dari lebih banyak predikat - itu disebut predikat majemuk. Pengontrol tindakan, atau pengontrol, mungkin hanya memiliki satu predikat, baik itu tunggal atau gabungan.

Jika pengguna tidak masuk, atau tidak memiliki izin yang tepat, pemeriksa predikat ini melempar 401 (HTTP Tidak Diotorisasi), yang ditangkap oleh middleware repoze.who untuk menampilkan halaman login yang memungkinkan pengguna untuk masuk, dan mengarahkan pengguna kembali ke halaman yang benar setelah selesai.

Kondisi atau predikat berbeda yang ditentukan dalam modul tg.predicates adalah -

Sr.No. modul tg.predicates & Deskripsi
1

All

Periksa apakah semua predikat yang ditentukan terpenuhi

2

Any

Periksa apakah setidaknya satu dari predikat tertentu terpenuhi

3

is_user

Periksa apakah nama pengguna yang diautentikasi adalah yang ditentukan

4

in_group

Periksa apakah pengguna termasuk dalam grup tertentu.

5

in_all_groups

Periksa apakah pengguna termasuk dalam semua grup yang ditentukan.

6

in_any_group

Periksa apakah pengguna termasuk dalam setidaknya salah satu grup yang ditentukan.

7

is_anonymous

Periksa apakah pengguna saat ini anonim.

8

has_permission

Periksa apakah pengguna saat ini memiliki izin yang ditentukan.

9

has_all_permissions

Periksa apakah pengguna saat ini telah diberikan semua izin yang ditentukan.

10

has_any_permission

Periksa apakah pengguna memiliki setidaknya satu dari izin yang ditentukan.

Misalnya, jika Anda memiliki predikat, yaitu grant access user belonging to customers group, maka Anda dapat menggunakan pemeriksa predikat bawaan berikut -

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

Pemeriksa predikat berikut akan memberikan akses ke pengguna 'root' atau siapa pun dengan izin 'kelola' -

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