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

From EjudgeWiki
(removed)
(Tag: Replaced)
 
(11 intermediate revisions 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
 
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.
 
 
 
Для турнирной авторизации по логину и паролю используется метод 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.
 
 
 
FIXME: разобраться с непривилегированными логинами по сессионному ключу...
 
 
 
=== Авторизация привилегированных пользователей ===
 
 
 
Для авторизации с правами администратора на основе полномочий системы 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
 
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_level|priv_level]], [[Python:role|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.
 

Latest revision as of 15:38, 16 December 2021