Приложение 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 или кому-либо с правами на управление: