Этот раздел объясняет механизмы авторизации доступа к 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 необходимо задать перечень пользователей в настройках главного (или если не указан серверный пост, первого по списку) поста.
Это можно сделать двумя способами:

Дополнительную информацию можно посмотреть в описании флага server.makeRegistration и в описании добавления пользователей.


ВНИМАНИЕ!!! Авторизация ОС не рекомендуется к использованию, если 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();