По умолчанию доступ к панели управления открыт только для локального администратора сервера. В данной статье описан способ авторизации для собственного пользователя.
Например, у вас есть файл etc/passwd, в котором хранятся имена пользователей и их пароли, разделённые двоеточиями. Пароли хранятся в открытом виде.
За авторизацию пользователей отвечает базовая функция authenticate. Подробнее см. в статье Аутентификация. Поэтому для авторизации собственного пользователя нужно создать обработчик события authenticate. Подробнее см. в статье Изменение поведения системы при определенных действиях пользователей, события.
Чтобы упростить создание собственного метода авторизации, используйте класс isp_api::AuthMethod из C++ CORE API. В минимальном варианте нужно определить два виртуальных метода AuthenByName и AuthenByPassword:
#include <mgr/mgrstr.h>
#include <api/auth_method.h>
#include <api/module.h>
#include <fstream>
#include <sstream>
#define PASSWD "etc/passwd"
namespace {
using namespace isp_api;
class MyAuth : public AuthMethod {
public:
MyAuth() : AuthMethod("myauth") {}
string Lookup(const string &name) const {
if (!name.empty()) {
std::ifstream in(PASSWD);
while (in.good()) {
std::stringbuf buf;
in.get(buf);
in.get();
string pass = buf.str();
string user = str::GetWord(pass, ':');
if (user == name && !pass.empty())
return pass;
}
}
return "";
}
void FillupParams(const string &user, mgr_xml::Xml &xml) const {
xml.GetRoot().AppendChild("ok")
.SetProp("level", str::Str(lvAdmin))
.SetProp("name", user)
.SetProp("method", "myauth");
}
virtual void AuthenByName(mgr_xml::Xml &res, const string &name) const {
if (!Lookup(name).empty())
FillupParams(name, res);
}
virtual void AuthenByPassword(mgr_xml::Xml &res, const string &name, const string &pass) const {
string lppass = Lookup(name);
if (!lppass.empty() && lppass == pass)
FillupParams(name, res);
}
};
MODULE_INIT(myauth, "") {
new MyAuth();
}
} // end of private namespace
После создания обработчика выполните сборку компонентов и загрузите библиотеку. Подробнее см. в статье Сборка собственных компонентов.