Difference between revisions of "Python: Авторизация в базе пользователей"
(→contestCookieLogin) |
|||
(6 intermediate revisions by the same user not shown) | |||
Line 1: | Line 1: | ||
− | Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Расширение]]/[[Доступ к ejudge из программ на Питоне]]/[[Python: Работа с базой пользователей]]/[[Python: Авторизация в базе пользователей]]. | + | Навигация: [[Main Page|Главная страница]]/[[Система ejudge]]/[[Расширение]]/[[Доступ к ejudge из программ на Питоне]]/[[Python: Работа с базой пользователей|Работа с базой пользователей]]/[[Python: Авторизация в базе пользователей|Авторизация в базе пользователей]]. |
В системе ejudge различается несколько уровней привилегий пользователей: | В системе ejudge различается несколько уровней привилегий пользователей: | ||
Line 15: | Line 15: | ||
И для обычных пользователей, и для привилегированных пользователей авторизация проводится либо по паре логин-пароль, либо по сессионному ключу. Сессионный ключ генерируется при авторизации по логину. Сессионный ключ действителен 24 часа. | И для обычных пользователей, и для привилегированных пользователей авторизация проводится либо по паре логин-пароль, либо по сессионному ключу. Сессионный ключ генерируется при авторизации по логину. Сессионный ключ действителен 24 часа. | ||
− | Далее | + | Далее кратко рассматриваются поддерживаемые запросы на авторизацию соединения. |
=== Авторизация обычных пользователей === | === Авторизация обычных пользователей === | ||
Line 25: | Line 25: | ||
Идентификатор турнира может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида: | Идентификатор турнира может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида: | ||
{ 'user_id' : [[Python:user_id|user_id]], 'sid' : [[Python:sid|sid]], 'name' : [[Python:name|name]] } | { '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. | Возвращаемое имя пользователя name соответствует указанному турниру contest_id. | ||
Line 57: | Line 65: | ||
Для авторизации с правами администратора по логину и паролю используется метод 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: | + | 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 - это словарь следующего вида: | Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида: | ||
{ 'user_id' : [[Python:user_id|user_id]], 'sid' : [[Python:sid|sid]], 'priv_level' : [[Python:priv_level|priv_level]], 'name' : [[Python:name|name]] } | { '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. | Возвращаемое имя пользователя name соответствует указанному турниру contest_id. |
Latest revision as of 20:40, 8 December 2007
Навигация: Главная страница/Система ejudge/Расширение/Доступ к ejudge из программ на Питоне/Работа с базой пользователей/Авторизация в базе пользователей.
В системе ejudge различается несколько уровней привилегий пользователей:
- Обычный пользователь. Для него доступны только возможности, заданные в конфигурационном файле турнира.
- Координатор, проверяющий, старший проверяющий. Имеют ограниченные возможности по ручной проверке решений и по назначению проверяющих на проверку решений. В данный момент эти привилегии не реализованы до конца.
- Судья. Имеет возможность использовать административный интерфейс new-judge. Точные полномочия для судьи устанавливаются с помощью бит полномочий в конфигурационном файле турнира. В частности, к судьям относятся и наблюдатели, которые могут следить за ходом турнира, но не могут в него вмешиваться.
- Администратор. Имеет возможность использовать административный интерфейс new-master. Точные полномочия для администраторов устанавливаются с помощью бит полномочий в конфигурационном файле турнира.
Авторизация выполняется один раз при работе с сервером. Уже авторизованное соединение не может быть авторизовано по-другому.
Уровень привилегий выбирается при начальной авторизации и также не может быть изменен в дальнейшем. Уровни привилегий не включаются друг в друга, то есть, например, администратор может не иметь прав координатора. Администратор и судья всегда могут входить как обычные пользователи.
Для обычных пользователей различаются два вида авторизации: общая авторизация и авторизация на конкретный турнир. Общая авторизация производится при создании новых пользователей, регистрации пользователя на турнир и т. п., то есть при выполнении операций в программе new-register. Авторизация на конкретный турнир выполняется при входе в программу new-client. Авторизация на турнир может требовать отдельного пароля, накладывать другие ограничения на IP-адреса и т. д. Поэтому для участия в турнире (сдачи задач, просмотра текущих результатов и т. д.) необходима турнирная авторизация. Для изменения регистрационных настроек необходима регистрационная авторизация.
И для обычных пользователей, и для привилегированных пользователей авторизация проводится либо по паре логин-пароль, либо по сессионному ключу. Сессионный ключ генерируется при авторизации по логину. Сессионный ключ действителен 24 часа.
Далее кратко рассматриваются поддерживаемые запросы на авторизацию соединения.
Contents
Авторизация обычных пользователей
login
Для регистрационной авторизации по логину и паролю используется метод 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.
loginBySID
Метод используется для регистрационной авторизации непривилегированного пользователя по сессионному ключу
res = clnt.contestLoginBySID(ip_str, ssl_flag, contest_id, sid)
Идентификатор турнира может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
{ 'user_id' : user_id, 'locale_id' : locale_id, 'login': login, 'name' : name }
Возвращаемое имя пользователя name соответствует указанному турниру contest_id.
contestLogin
Для турнирной авторизации по логину и паролю используется метод 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.
contestLoginBySID
Метод используется для авторизации непривилегированного пользователя на турнир по сессионному ключу
res = clnt.contestLoginBySID(ip_str, ssl_flag, contest_id, sid)
Идентификатор турнира не может быть равен 0. Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
{ 'user_id' : user_id, 'locale_id' : locale_id, 'login': login, 'name' : name }
Возвращаемое имя пользователя name соответствует указанному турниру contest_id.
Авторизация привилегированных пользователей
adminProcess
Для авторизации с правами администратора на основе полномочий системы linux можнно использовать метод adminProcess
res = clnt.adminProcess()
Для авторизации используется идентификатор пользователя linux. Пользователи linux отображаются в пользователей ejudge с помощью отображения пользователей в конфигурационном файле ejudge.xml. Если операция завершилась успешно, то res - это словарь следующего вида:
{ 'user_id' : user_id, 'sid' : sid, 'name' : name }
Возвращаемое имя пользователя name соответствует турниру по умолчанию (турнир 0).
privLogin
Для авторизации с правами администратора по логину и паролю используется метод privLogin
res = clnt.privLogin(ip_str, ssl_flag, contest_id, locale_id, priv_role, login, password)
Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
{ 'user_id' : user_id, 'sid' : sid, 'priv_level' : priv_level, 'name' : name }
Возвращаемое имя пользователя name соответствует указанному турниру contest_id. В результате авторизации уровень привилегий может быть понижен. Например, если был запрошен уровень привилегий ADMIN, а пользователь имеет только уровень привилегий JUDGE, будет установлен уровень привилегий JUDGE и это значение будет возвращено в priv_level.
privLoginBySID
Для авторизации с правами администратора по сессионному ключу используется метод privLoginBySID.
res = clnt.privLoginBySID(ip_str, ssl_flag, contest_id, sid, priv_level)
Если операция завершилась с ошибкой выбрасывается исключение IOError. Если операция завершилась успешно, то res - это словарь следующего вида:
{ 'user_id' : user_id, 'contest_id' : contest_id, 'locale_id' : locale_id, 'priv_level' : priv_level, 'login' : login, 'name' : name }
Возвращаемое имя пользователя name соответствует указанному турниру contest_id.