Учебники

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

Все

Проверьте, выполнены ли все указанные предикаты

2

любой

Проверьте, соответствует ли хотя бы один из указанных предикатов

3

is_user

Убедитесь, что имя пользователя, прошедшего аутентификацию, является указанным

4

в группе

Убедитесь, что пользователь принадлежит к определенной группе.

5

in_all_groups

Убедитесь, что пользователь принадлежит ко всем указанным группам.

6

in_any_group

Убедитесь, что пользователь принадлежит хотя бы к одной из указанных групп.

7

is_anonymous

Убедитесь, что текущий пользователь является анонимным.

8

has_permission

Убедитесь, что текущий пользователь имеет указанное разрешение.

9

has_all_permissions

Убедитесь, что текущему пользователю предоставлены все указанные разрешения.

10

has_any_permission

Убедитесь, что у пользователя есть хотя бы одно из указанных разрешений.

Все

Проверьте, выполнены ли все указанные предикаты

любой

Проверьте, соответствует ли хотя бы один из указанных предикатов

is_user

Убедитесь, что имя пользователя, прошедшего аутентификацию, является указанным

в группе

Убедитесь, что пользователь принадлежит к определенной группе.

in_all_groups

Убедитесь, что пользователь принадлежит ко всем указанным группам.

in_any_group

Убедитесь, что пользователь принадлежит хотя бы к одной из указанных групп.

is_anonymous

Убедитесь, что текущий пользователь является анонимным.

has_permission

Убедитесь, что текущий пользователь имеет указанное разрешение.

has_all_permissions

Убедитесь, что текущему пользователю предоставлены все указанные разрешения.

has_any_permission

Убедитесь, что у пользователя есть хотя бы одно из указанных разрешений.

Например, если у вас есть предикат, то есть пользователь с разрешенным доступом, принадлежащий к группе клиентов , вы можете использовать следующую встроенную проверку предикатов:

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

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