Учебники

Web2py — Контроль доступа

Почти каждое приложение должно иметь возможность аутентифицировать пользователей и устанавливать разрешения. web2py поставляется с обширным и настраиваемым механизмом контроля доступа на основе ролей .web2py . Он также поддерживает протоколы, такие как CAS, OpenID, OAuth 1.0, LDAP, PAM, X509 и многие другие.

web2py включает механизм, известный как механизм управления доступом на основе ролей (RBAC), который является подходом к ограничению доступа к системе авторизованным пользователям. Класс web2py, который реализует RBAC, называется Auth.

Посмотрите на схему, приведенную ниже.

Auth

Auth определяет следующие таблицы —

Sr.No Название таблицы и описание
1

AUTH_USER

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

2

auth_group

хранит группы или роли для пользователей в структуре «многие ко многим»

3

auth_membership

Хранит информацию о связях пользователей и групп в структуре «многие ко многим»

4

auth_permission

Таблица связывает группы и разрешения.

5

auth_event

регистрирует изменения в других таблицах и успешный доступ

6

auth_cas

Он используется для Центральной службы аутентификации

AUTH_USER

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

auth_group

хранит группы или роли для пользователей в структуре «многие ко многим»

auth_membership

Хранит информацию о связях пользователей и групп в структуре «многие ко многим»

auth_permission

Таблица связывает группы и разрешения.

auth_event

регистрирует изменения в других таблицах и успешный доступ

auth_cas

Он используется для Центральной службы аутентификации

Настройка Auth

Существует два способа настройки Auth.

  • Чтобы определить пользовательскую таблицу db.auth_user с нуля.

  • Позвольте web2py определить таблицу аутентификации .

Чтобы определить пользовательскую таблицу db.auth_user с нуля.

Позвольте web2py определить таблицу аутентификации .

Давайте посмотрим на последний метод определения таблицы аутентификации . В модели db.py замените следующую строку —

auth.define_tables()

Замените его следующим кодом —

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}')),
   Field('address','text')
]

auth.define_tables(username = True)

Предполагается, что каждый пользователь состоит из номера телефона, имени пользователя и адреса.

auth.settings.extra_fields — это словарь дополнительных полей. Ключ — это имя таблицы аутентификации, в которую нужно добавить дополнительные поля. Значение представляет собой список дополнительных полей. Здесь мы добавили два дополнительных поля, phone_number и address .

имя пользователя должно обрабатываться особым образом, поскольку оно участвует в процессе аутентификации, который обычно основан на поле электронной почты. Передав аргумент username в следующую строку, он сообщает web2py, что нам нужно поле username, и мы хотим использовать его для входа в систему вместо поля электронной почты. Он действует как первичный ключ.

auth.define_tables(username = True)

Имя пользователя рассматривается как уникальное значение. Могут быть случаи, когда регистрация происходит вне обычной регистрационной формы. Также бывает, что новый пользователь вынужден войти в систему, чтобы завершить регистрацию.

Это можно сделать с помощью фиктивного поля complete_registration, которое по умолчанию установлено в False и имеет значение True, когда они обновляют свой профиль.

auth.settings.extra_fields['auth_user'] = [
   Field('phone_number',requires = IS_MATCH('\d{3}\-\d{3}\-\d{4}'),
   comment = "i.e. 123-123-1234"),
   Field('address','text'),
   Field('complete_registration',default = False,update = True,
   writable = False, readable = False)
]

auth.define_tables(username = True)

Этот сценарий может побудить новых пользователей при входе в систему завершить регистрацию.

В db.py , в папке моделей, мы можем добавить следующий код —

if auth.user and not auth.user.complete_registration:
if not (request.controller,request.function) == ('default','user'):
   redirect(URL('default','user/profile'))

Это заставит новых пользователей редактировать свой профиль в соответствии с требованиями.

авторизация

Это процесс предоставления некоторого доступа или разрешения чего-либо пользователям.

В web2py, как только новый пользователь создан или зарегистрирован, создается новая группа, содержащая пользователя. Роль нового пользователя условно обозначается как «user_ [id]», где id — это уникальная идентификация пользователя.

Значение по умолчанию для создания новой группы —

auth.settings.create_user_groups = "user_%(id)s"

Создание групп среди пользователей может быть отключено с помощью —

auth.settings.create_user_groups = None

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

Некоторые из реализаций перечислены ниже:

Sr.No Командование и использование
1

auth.add_group (‘role’, ‘description’)

возвращает идентификатор вновь созданной группы.

2

auth.del_group (group_id)

Удаляет группу с указанным идентификатором

3

auth.del_group (auth.id_group ( ‘user_7’))

Удаляет группу пользователей с заданным идентификатором.

4

auth.user_group (идентификатор_пользователя)

Возвращает значение id группы, уникально связанной с данным пользователем.

5

auth.add_membership (group_id, user_id)

Возвращает значение user_id для данного group_id

6

auth.del_membership (group_id, user_id)

Отменяет доступ для данного member_id, т.е. user_id из данной группы.

7

auth.has_membership (идентификатор_группы, идентификатор_пользователя, роль)

Проверяет, принадлежит ли user_id к данной группе.

auth.add_group (‘role’, ‘description’)

возвращает идентификатор вновь созданной группы.

auth.del_group (group_id)

Удаляет группу с указанным идентификатором

auth.del_group (auth.id_group ( ‘user_7’))

Удаляет группу пользователей с заданным идентификатором.

auth.user_group (идентификатор_пользователя)

Возвращает значение id группы, уникально связанной с данным пользователем.

auth.add_membership (group_id, user_id)

Возвращает значение user_id для данного group_id

auth.del_membership (group_id, user_id)

Отменяет доступ для данного member_id, т.е. user_id из данной группы.

auth.has_membership (идентификатор_группы, идентификатор_пользователя, роль)

Проверяет, принадлежит ли user_id к данной группе.

Центральная служба аутентификации (CAS)

web2py предоставляет отраслевой стандарт, а именно, Client Authentication Service — CAS как для клиента, так и для сервера, встроенного в web2py. Это сторонний инструмент аутентификации.

Это открытый протокол для распределенной аутентификации. Работа CAS заключается в следующем —

Если пользователь посещает веб-сайт, протокол проверяет, прошел ли пользователь аутентификацию.

Если пользователь не аутентифицирован в приложении, протокол перенаправляет на страницу, где пользователь может зарегистрироваться или войти в приложение.

Если регистрация завершена, пользователь получает электронное письмо. Регистрация не завершена до тех пор, пока пользователь не подтвердит адрес электронной почты.

После успешной регистрации пользователь аутентифицируется ключом, который используется устройством CAS.

Ключ используется для получения учетных данных пользователя через HTTP-запрос, который устанавливается в фоновом режиме.