TurboGears - Авторизация и аутентификация

Приложение TurboGears создается с помощью параметров быстрого запуска и настройки приложения набора инструментов коробки передач, в котором по умолчанию включена поддержка авторизации и аутентификации. Модели, объявленные в auth.py, настраиваются и инициализируются в соответствии со значениями, присвоенными в bootstrap.py.

Следующие модели объявлены в auth.py -

Модель пользователя

Модель User содержит дизайн таблицы tg_user. Эта таблица используется пакетом repose.who. Этот пакет 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. Его определение дается в auth.py следующим образом:

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)

Модель предиката

Модуль предикатов в пакете tg содержит определения для средств проверки предикатов. Предикат - это условие, которое должно быть выполнено, чтобы пользователь мог получить доступ к запрошенному источнику. Такой предикат или условие может состоять из нескольких предикатов - они называются составными предикатами. Контроллеры действий или контроллеры могут иметь только один предикат, будь то одиночный или составной.

Если пользователь не вошел в систему или не имеет необходимых разрешений, эта программа проверки предикатов выдает ошибку 401 (HTTP Unauthorized), которая перехватывается промежуточным программным обеспечением repoze.who для отображения страницы входа, позволяющей пользователю войти в систему, и перенаправления пользователь вернется на нужную страницу, когда они будут закончены.

Различные условия или предикаты, определенные в модуле tg.predicates:

Sr. No. Модуль 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’)

Следующая проверка предикатов предоставит доступ пользователю root или любому лицу с разрешением на управление:

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