Индивидуальная регистрация web2py - PullRequest
4 голосов
/ 30 декабря 2011

Я новичок в web2py. Я хочу сделать приложение, которое имеет одного администратора (супер пользователь) учетная запись. Я хочу ограничить «только администратор может зарегистрировать пользователя». Чтобы Как только администратор войдет в приложение, он увидит различные меню, такие как «Домой», «Настройка» и «Регистрация пользователя». Я сделал с другими вариантами, но я Проблемы с регистрацией пользователя.

В моем приложении есть ссылка «Зарегистрироваться» & ndash; http://127.0.0.1:8000/filemanager2/default/user/register. Но когда я нажимаю на нее, я получаю перенаправлен на страницу профилей. Это потому что администратор уже вошел и, следовательно, после нажатия на ссылку регистрации он показывает администратора профиль аккаунта. Что я могу сделать, чтобы это исправить?

1 Ответ

6 голосов
/ 30 декабря 2011

Если вы хотите воспользоваться встроенной функцией Auth register (), вы можете немного ее взломать следующим образом:

@auth.requires_membership('admin')
def register()
    admin_auth = session.auth
    auth.is_logged_in = lambda: False
    def post_register(form):
        session.auth = admin_auth
        auth.user = session.auth.user
    auth.settings.register_onaccept = post_register
    return dict(form=auth.register())

Обычно Auth.register () проверяет, вошел ли пользователь в систему и, если это так, перенаправляет на страницу профиля. Вышеуказанный метод заменяет метод auth.is_logged_in () лямбда-выражением, которое просто возвращает False, поэтому перенаправление не произойдет. Auth.register () также устанавливает для session.auth и auth.user значения, связанные с вновь зарегистрированным пользователем, поэтому приведенный выше код сохраняет значения администратора и использует обратный вызов register_onaccept для восстановления session.auth и auth.user к значениям администратора.

Другой подход заключается в создании собственной регистрационной формы на основе таблицы db.auth_user и использовании метода Auth.get_or_create_user () для добавления нового пользователя:

@auth.requires_membership('admin')
def register():
    form = SQLFORM(db.auth_user)
    if form.validate():
        admin_user = auth.user
        auth.get_or_create_user(form.vars)
        auth.user = admin_user
    return dict(form=form)

Однако в этом случае вы не получите поле подтверждения пароля, которое встроенная функция register () автоматически добавляет к форме регистрации. Как и во встроенном методе register (), get_or_create_user () также устанавливает auth.user в запись нового пользователя, поэтому после вставки необходимо заново установить его обратно в запись для пользователя admin.

Обратите внимание, что оба вышеупомянутых метода автоматически создадут новую уникальную группу Auth для нового пользователя и назначат пользователя в эту группу, если auth.settings.create_user_groups равен True (по умолчанию). Вместо описанных выше методов вы можете просто использовать стандартную SQLFORM для добавления новых пользователей, но тогда вам придется вручную обрабатывать создание и добавление в группы.

Возможно, нам следует добавить опцию, чтобы сделать это проще.

...