Difference between revisions of "Python: Авторизация в базе пользователей"
(13 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 часа. | ||
− | Далее | + | Далее кратко рассматриваются поддерживаемые запросы на авторизацию соединения. |
=== Авторизация обычных пользователей === | === Авторизация обычных пользователей === | ||
− | Для регистрационной авторизации по логину и паролю используется | + | ==== 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]]) | 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 - это словарь следующего вида: | Идентификатор турнира может быть равен 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. | ||
+ | |||
+ | ==== 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. |
Latest revision as of 20:40, 8 December 2007
Навигация: Главная страница/Система ejudge/Расширение/Доступ к ejudge из программ на Питоне/Работа с базой пользователей/Авторизация в базе пользователей.
В системе ejudge различается несколько уровней привилегий пользователей:
- Обычный пользователь. Для него доступны только возможности, заданные в конфигурационном файле турнира.
- Координатор, проверяющий, старший проверяющий. Имеют ограниченные возможности по ручной проверке решений и по назначению проверяющих на проверку решений. В данный момент эти привилегии не реализованы до конца.
- Судья. Имеет возможность использовать административный интерфейс new-judge. Точные полномочия для судьи устанавливаются с помощью бит полномочий в конфигурационном файле турнира. В частности, к судьям относятся и наблюдатели, которые могут следить за ходом турнира, но не могут в него вмешиваться.
- Администратор. Имеет возможность использовать административный интерфейс new-master. Точные полномочия для администраторов устанавливаются с помощью бит полномочий в конфигурационном файле турнира.
Авторизация выполняется один раз при работе с сервером. Уже авторизованное соединение не может быть авторизовано по-другому.
Уровень привилегий выбирается при начальной авторизации и также не может быть изменен в дальнейшем. Уровни привилегий не включаются друг в друга, то есть, например, администратор может не иметь прав координатора. Администратор и судья всегда могут входить как обычные пользователи.
Для обычных пользователей различаются два вида авторизации: общая авторизация и авторизация на конкретный турнир. Общая авторизация производится при создании новых пользователей, регистрации пользователя на турнир и т. п., то есть при выполнении операций в программе new-register. Авторизация на конкретный турнир выполняется при входе в программу new-client. Авторизация на турнир может требовать отдельного пароля, накладывать другие ограничения на IP-адреса и т. д. Поэтому для участия в турнире (сдачи задач, просмотра текущих результатов и т. д.) необходима турнирная авторизация. Для изменения регистрационных настроек необходима регистрационная авторизация.
И для обычных пользователей, и для привилегированных пользователей авторизация проводится либо по паре логин-пароль, либо по сессионному ключу. Сессионный ключ генерируется при авторизации по логину. Сессионный ключ действителен 24 часа.
Далее кратко рассматриваются поддерживаемые запросы на авторизацию соединения.
Contents
[hide]Авторизация обычных пользователей
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.