Этот раздел объясняет механизмы авторизации доступа к WEB-интерфейсу jCjS.
Существует несколько вариантов авторизации на WEB-интерфейсе jCjS, к ним относятся:
Чтобы включить базовую авторизацию, достаточно
в главном конфигуровочном файле jCjS
указать baseAuthUserName и baseAuthUserPass.
После запуска jCjS и перехода на страницу WEB-интерфейса,
вам будет предложено ввести логин и пароль.
ВНИМАНИЕ!!! Базовая авторизация не рекомендуется к использованию, если jCjS не настроен на зашифрованное соединение, т.к. логин и пароль передаются в открытом виде при каждом запросе HTTP.
Для гибкой настройки прав доступа к WEB-интерфесу можно воспользоваться
встроенным механизмом проверки прав доступа на уровне системы.
Прежде чем использовать авторизацию с системными учетными записями, необходимо
в главном конфигуровочном файле jCjS
установить тип авторизации "os".
В секции auth есть параметр type которому нужно присвоить значение "os".
Windows: Для разграничения доступа, необходимо выдать право
на чтение/запись в каталог C:/jCjS2/etc/ определенным пользователям.
В разделе "Настройка прав доступа в Windows"
вы найдете пошаговую инструкцию задания прав на директорию в среде Windows.
Если компютер входит в домен, то при авторизации на WEB-интерфейсе допустимо
указывать причастность пользователя к домену в формате Windows.
Пример: DOMAIN\user или user@domain.fullname.ru
Если домен не указывать, то сначала будет произведен поиск
пользователя на компютере с запущенным jCjS.
UNIX: На текущий момент авторизация в этих ОС находиться в разработке. Воспользуйтесь авторизацией jCjS.
ВНИМАНИЕ!!! Авторизация ОС не рекомендуется к использованию, если jCjS не настроен на зашифрованное соединение, т.к. логин и пароль передаются в открытом виде при входе пользователя в WEB-интерфейс. После этого авторизация происходит с помощью cookies.
Для настройки авторизации средствами jCjS необходимо задать
перечень пользователей в настройках главного
(или если не указан серверный пост, первого по списку) поста.
Это можно сделать двумя способами:
ВНИМАНИЕ!!! Авторизация ОС не рекомендуется к использованию, если jCjS не настроен на зашифрованное соединение, т.к. логин и пароль передаются в открытом виде при входе пользователя в WEB-интерфейс. После этого авторизация происходит с помощью cookies.
Для написания своего поста, можно воспользоваться
дефолтными файлами init.js и cmd.js в каталоге /jCjS2/stuff/include/
Содержание файлов приведено в финале этого раздела документации.
Если использовать на своем посте стандартные файлы,
то действия на WEB-интерфейсе можно делегировать определенным пользователям.
Для этого необходимо модифицировать файл cmd.js
Следующий листинг описывет необходимые изменения.
if(server.makeRegistration)
{
// Если в каком-то посте установлен флаг,
// то при первом вызове будет выполнен registration.js
if((typeof makeRegistration !== 'function'))
post.evalScript('registration.js');
// а теперь проверка (функция из registration.js)
if(!makeRegistration())
return;
}
// Проверка аргументов запроса
if(http.argCnt)
{
// Вот пример авторизации действий
if(http.argKeyByNum(0) == 'resetSystem')
{
// Проверка прав
if(!testAuth()) // функция из jcjsHelper.js
{
post.log('e', http.peerAddress + ': команда перегрузки сервера отменена');
http.respRedirect('/');
return;
}
post.log('w', http.peerAddress + ': принята команда перегрузки сервера');
http.respRedirect('/'+post.objectName+'/'); // редирект в каталог поста
server.reset(); // перегрузить
http.dropAlive(); // порвать соединение
return;
}
}
Дополнительную информацию можно посмотреть в описание флага server.makeRegistration
// Авторизация действий на странице поста
var r_user="Admin"
var r_pass="system"
//------------------------------------------------------------
// Задействовать помошника
if(typeof ifArray !== "function"){ post.evalScript("jcjsHelper.js"); }
// Разрешить глобальную регистрацию
//server.makeRegistration = true;
if(server.makeRegistration)
post.evalScript("registration.js");
else
post.r_auth = (server.auth != "")
? server.auth
: server.toBase64(r_user+':'+r_pass);
delete r_user;
delete r_pass;
//------------------------------------------------------------
// Задействовать помошника
post.evalScript("jcjsHelper.js");
...
Далее следует логика поста
var ans = ifFunction(ans) ? ans :
function ans() {
if(server.makeRegistration)
{
// Если в каком-то посте установлен флаг,
// то при первом вызове будет выполнен registration.js
if((typeof makeRegistration !== "function"))
post.evalScript("registration.js");
// а теперь проверка (функция из registration.js)
if(!makeRegistration())
return;
}
if((typeof jcjs_resp !== "function"))
post.evalScript("jcjsHelper.js");
// Отдать ресурсы из каталога поста
if(jcjs_resp())
return;
}
try{
ans();
}
catch(e)
{
http.respError(500, http.path);
post.log("e", e.fileName + ':' + e.lineNumber + ' "' + e.message + '"');
}
// обязательно выполнить функцию post.finished() // дать знать серверу JS что работа завершена. post.finished();