|
|
(One intermediate revision by the same user not shown) |
Line 1: |
Line 1: |
− | Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Расширение]]/[[Доступ к ejudge из программ на Питоне]]/[[Python: Работа с базой пользователей]]/[[Python: Авторизация в базе пользователей]].
| + | [[Category:Deleted]] |
− | | |
− | В системе ejudge различается несколько уровней привилегий пользователей:
| |
− | * Обычный пользователь. Для него доступны только возможности, заданные в конфигурационном файле турнира.
| |
− | * Координатор, проверяющий, старший проверяющий. Имеют ограниченные возможности по ручной проверке решений и по назначению проверяющих на проверку решений. В данный момент эти привилегии не реализованы до конца.
| |
− | * Судья. Имеет возможность использовать административный интерфейс new-judge. Точные полномочия для судьи устанавливаются с помощью бит полномочий в конфигурационном файле турнира. В частности, к судьям относятся и наблюдатели, которые могут следить за ходом турнира, но не могут в него вмешиваться.
| |
− | * Администратор. Имеет возможность использовать административный интерфейс new-master. Точные полномочия для администраторов устанавливаются с помощью бит полномочий в конфигурационном файле турнира.
| |
− | | |
− | Авторизация выполняется один раз при работе с сервером. Уже авторизованное соединение не может быть авторизовано по-другому.
| |
− | | |
− | Уровень привилегий выбирается при начальной авторизации и также не может быть изменен в дальнейшем. Уровни привилегий не включаются друг в друга, то есть, например, администратор может не иметь прав координатора. Администратор и судья всегда могут входить как обычные пользователи.
| |
− | | |
− | Для обычных пользователей различаются два вида авторизации: общая авторизация и авторизация на конкретный турнир. Общая авторизация производится при создании новых пользователей, регистрации пользователя на турнир и т. п., то есть при выполнении операций в программе new-register. Авторизация на конкретный турнир выполняется при входе в программу new-client. Авторизация на турнир может требовать отдельного пароля, накладывать другие ограничения на IP-адреса и т. д. Поэтому для участия в турнире (сдачи задач, просмотра текущих результатов и т. д.) необходима турнирная авторизация. Для изменения регистрационных настроек необходима регистрационная авторизация.
| |
− | | |
− | И для обычных пользователей, и для привилегированных пользователей авторизация проводится либо по паре логин-пароль, либо по сессионному ключу. Сессионный ключ генерируется при авторизации по логину. Сессионный ключ действителен 24 часа.
| |
− | | |
− | Далее кратно рассматриваются поддерживаемые запросы на авторизацию соединения.
| |
− | | |
− | === Авторизация обычных пользователей ===
| |
− | | |
− | ==== login ====
| |
− | | |
− | Для регистрационной авторизации по логину и паролю используется метод login
| |
− | res = clnt.login([[Python:ip_str|ip_str]], [[Python:ssl_flag|ssl_flag]], [[Python:contest_id|contest_id]], [[Python:locale_id|locale_id]], [[Python:login|login]], [[Python:password|password]])
| |
− | Идентификатор турнира может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
| |
− | { 'user_id' : [[Python:user_id|user_id]], 'sid' : [[Python:sid|sid]], 'name' : [[Python:name|name]] }
| |
− | Возвращаемое имя пользователя name соответствует указанному турниру contest_id.
| |
− | | |
− | ==== loginBySID ====
| |
− | | |
− | Метод используется для регистрационной авторизации непривилегированного пользователя по сессионному ключу
| |
− | res = clnt.contestLoginBySID([[Python:ip_str|ip_str]], [[Python:ssl_flag|ssl_flag]], [[Python:contest_id|contest_id]], [[Python:sid|sid]])
| |
− | Идентификатор турнира может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
| |
− | { 'user_id' : [[Python:user_id|user_id]], 'locale_id' : [[Python:locale_id|locale_id]], 'login': [[Python:login|login]], 'name' : [[Python:name|name]] }
| |
− | Возвращаемое имя пользователя name соответствует указанному турниру contest_id.
| |
− | | |
− | ==== contestLogin ====
| |
− | | |
− | Для турнирной авторизации по логину и паролю используется метод contestLogin
| |
− | res = clnt.contestLogin([[Python:ip_str|ip_str]], [[Python:ssl_flag|ssl_flag]], [[Python:contest_id|contest_id]], [[Python:locale_id|locale_id]], [[Python:login|login]], [[Python:password|password]])
| |
− | Идентификатор турнира не может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
| |
− | { 'user_id' : [[Python:user_id|user_id]], 'sid' : [[Python:sid|sid]], 'name' : [[Python:name|name]] }
| |
− | Возвращаемое имя пользователя name соответствует указанному турниру contest_id.
| |
− | | |
− | ==== contestLoginBySID ====
| |
− | | |
− | Метод используется для авторизации непривилегированного пользователя на турнир по сессионному ключу
| |
− | res = clnt.contestLoginBySID([[Python:ip_str|ip_str]], [[Python:ssl_flag|ssl_flag]], [[Python:contest_id|contest_id]], [[Python:sid|sid]])
| |
− | Идентификатор турнира не может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
| |
− | { 'user_id' : [[Python:user_id|user_id]], 'locale_id' : [[Python:locale_id|locale_id]], 'login': [[Python:login|login]], 'name' : [[Python:name|name]] }
| |
− | Возвращаемое имя пользователя name соответствует указанному турниру contest_id.
| |
− | | |
− | === Авторизация привилегированных пользователей ===
| |
− | | |
− | ==== adminProcess ====
| |
− | | |
− | Для авторизации с правами администратора на основе полномочий системы linux можнно использовать метод adminProcess
| |
− | res = clnt.adminProcess()
| |
− | Для авторизации используется идентификатор пользователя linux. Пользователи linux отображаются в пользователей ejudge с помощью отображения пользователей в конфигурационном файле ejudge.xml.
| |
− | Если операция завершилась успешно, то res - это словарь следующего вида:
| |
− | { 'user_id' : [[Python:user_id|user_id]], 'sid' : [[Python:sid|sid]], 'name' : [[Python:name|name]] }
| |
− | Возвращаемое имя пользователя name соответствует турниру по умолчанию (турнир 0).
| |
− | | |
− | ==== privLogin ====
| |
− | | |
− | Для авторизации с правами администратора по логину и паролю используется метод privLogin
| |
− | res = clnt.privLogin([[Python:ip_str|ip_str]], [[Python:ssl_flag|ssl_flag]], [[Python:contest_id|contest_id]], [[Python:locale_id|locale_id]], [[Python:priv_role|priv_role]], [[Python:login|login]], [[Python:password|password]])
| |
− | Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
| |
− | { 'user_id' : [[Python:user_id|user_id]], 'sid' : [[Python:sid|sid]], 'priv_level' : [[Python:priv_level|priv_level]], 'name' : [[Python:name|name]] }
| |
− | Возвращаемое имя пользователя name соответствует указанному турниру contest_id.
| |
− | В результате авторизации уровень привилегий может быть понижен. Например, если был запрошен уровень привилегий ADMIN, а пользователь имеет только уровень привилегий JUDGE, будет установлен уровень привилегий JUDGE и это значение будет возвращено в priv_level.
| |
− | | |
− | ==== privLoginBySID ====
| |
− | | |
− | Для авторизации с правами администратора по сессионному ключу используется метод privLoginBySID.
| |
− | res = clnt.privLoginBySID([[Python:ip_str|ip_str]], [[Python:ssl_flag|ssl_flag]], [[Python:contest_id|contest_id]], [[Python:sid|sid]], [[Python:priv_level|priv_level]])
| |
− | Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
| |
− | { 'user_id' : [[Python:user_id|user_id]], 'contest_id' : [[Python:contest_id|contest_id]], 'locale_id' : [[Python:locale_id|locale_id]], 'priv_level' : [[Python:priv_level|priv_level]],
| |
− | 'login' : [[Python:login|login]], 'name' : [[Python:name|name]] }
| |
− | Возвращаемое имя пользователя name соответствует указанному турниру contest_id.
| |