Python: п░п╡я┌п╬я─п╦п╥п╟я├п╦я▐ п╡ п╠п╟п╥п╣ п©п╬п╩я▄п╥п╬п╡п╟я┌п╣п╩п╣п╧

From EjudgeWiki
Revision as of 21:14, 24 November 2007 by Cher (talk | contribs)

Навигация: Главная страница/Система ejudge/Расширение/Доступ к ejudge из программ на Питоне/Python: Работа с базой пользователей/Python: Авторизация в базе пользователей.

В системе ejudge различается несколько уровней привилегий пользователей:

  • Обычный пользователь. Для него доступны только возможности, заданные в конфигурационном файле турнира.
  • Координатор, проверяющий, старший проверяющий. Имеют ограниченные возможности по ручной проверке решений и по назначению проверяющих на проверку решений. В данный момент эти привилегии не реализованы до конца.
  • Судья. Имеет возможность использовать административный интерфейс new-judge. Точные полномочия для судьи устанавливаются с помощью бит полномочий в конфигурационном файле турнира. В частности, к судьям относятся и наблюдатели, которые могут следить за ходом турнира, но не могут в него вмешиваться.
  • Администратор. Имеет возможность использовать административный интерфейс new-master. Точные полномочия для администраторов устанавливаются с помощью бит полномочий в конфигурационном файле турнира.

Авторизация выполняется один раз при работе с сервером. Уже авторизованное соединение не может быть авторизовано по-другому.

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

Для обычных пользователей различаются два вида авторизации: общая авторизация и авторизация на конкретный турнир. Общая авторизация производится при создании новых пользователей, регистрации пользователя на турнир и т. п., то есть при выполнении операций в программе new-register. Авторизация на конкретный турнир выполняется при входе в программу new-client. Авторизация на турнир может требовать отдельного пароля, накладывать другие ограничения на IP-адреса и т. д. Поэтому для участия в турнире (сдачи задач, просмотра текущих результатов и т. д.) необходима турнирная авторизация. Для изменения регистрационных настроек необходима регистрационная авторизация.

И для обычных пользователей, и для привилегированных пользователей авторизация проводится либо по паре логин-пароль, либо по сессионному ключу. Сессионный ключ генерируется при авторизации по логину. Сессионный ключ действителен 24 часа.

Далее кратно рассматриваются поддерживаемые запросы на авторизацию соединения.

Авторизация обычных пользователей

Для регистрационной авторизации по логину и паролю используется метод login

res = clnt.login(ip_str, ssl_flag, contest_id, locale_id, login, password)

Идентификатор турнира может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:

{ 'user_id' : user_id, 'sid' : sid, 'name' : name }

Возвращаемое имя пользователя name соответствует указанному турниру contest_id.

Для турнирной авторизации по логину и паролю используется метод contestLogin

res = clnt.contestLogin(ip_str, ssl_flag, contest_id, locale_id, login, password)

Идентификатор турнира не может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:

{ 'user_id' : user_id, 'sid' : sid, 'name' : name }

Возвращаемое имя пользователя name соответствует указанному турниру contest_id.

FIXME: разобраться с непривилегированными логинами по сессионному ключу...

Авторизация привилегированных пользователей

Для авторизации с правами администратора на основе полномочий системы linux можнно использовать метод adminProcess

res = clnt.adminProcess()

Для авторизации используется идентификатор пользователя linux. Пользователи linux отображаются в пользователей ejudge с помощью отображения пользователей в конфигурационном файле ejudge.xml. Если операция завершилась успешно, то res - это словарь следующего вида:

{ 'user_id' : user_id, 'sid' : sid, 'name' : name }

Возвращаемое имя пользователя name соответствует турниру по умолчанию (турнир 0).