Контроль целостности логинов юзеров

This commit is contained in:
2025-08-18 17:19:29 +03:00
parent ef12d4f7a9
commit 037390a9c7
11 changed files with 150 additions and 155 deletions

View File

@@ -404,7 +404,7 @@ int DataBaseLMS::deleteTaskFIM(int id_task)
report_id = queryReportsSEL.value(0).toInt();
}
}
if(!report_id)
else
{
resBool = db->rollback();
return 0;

View File

@@ -267,8 +267,8 @@ int DataBaseLMS::deleteTrainee(int id_trainee)
int mulf_id = queryMulfSEL.value(0).toInt();
/*Удаление сигналов для этой неисправности*/
queryStr = QString("DELETE FROM public.mals_signs "
"WHERE mals_signs.fk_mulfunction_id = %1 ").arg(
queryStr = QString("DELETE FROM public.malf_signs "
"WHERE malf_signs.fk_malfunction_id = %1 ").arg(
mulf_id);
QSqlQuery querySign = QSqlQuery(*db);
if(!queryExec(queryStr, &querySign))

View File

@@ -123,37 +123,6 @@ int InterfaceDataBaseLMS::delInstructor(int id)
int InterfaceDataBaseLMS::editInstructor(Instructor instructor)
{
//QMutexLocker mtxLocker(&mtxAccess);
//Проверка корректности логина, имени, пароля
if(instructor.getName() == QStringLiteral("<name>"))
{//Имя не корректно!
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("Unacceptable instructor name has been entered.\nThe changes will not be accepted."));
return 0;
}
if(instructor.getLogin() == QStringLiteral("<login>"))
{//Логин не корректен!
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("Unacceptable instructor login has been entered.\nThe changes will not be accepted."));
return 0;
}
if(instructor.getPassword() == QStringLiteral("<password>"))
{//Пароль не корректный!
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("Unacceptable instructor password has been entered.\nThe changes will not be accepted."));
return 0;
}
if(selectUserID(DataBaseLMS::TypeUserDBInstructor, instructor.getLogin()) || selectUserID(DataBaseLMS::TypeUserDBTrainee, instructor.getLogin()))
{//Логин уже существует!
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted."));
return 0;
}
return updateInstructor(instructor);
}
@@ -324,26 +293,6 @@ int InterfaceDataBaseLMS::delGroup(int id)
int InterfaceDataBaseLMS::editGroup(Group group)
{
//QMutexLocker mtxLocker(&mtxAccess);
//Проверка корректности имени
QList<Group> listGroups = selectAllGroups();
for(Group exist_group : listGroups)
{
if(group.getName() == QStringLiteral("<group>"))
{//Имя не корректно!
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("Unacceptable group name has been entered.\nThe changes will not be accepted."));
return 0;
}
if(group.getName() == exist_group.getName() && group.getID() != exist_group.getID())
{//Имя уже существует
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("An existing group name has been entered.\nThe changes will not be accepted."));
return 0;
}
}
return updateGroup(group);
}
@@ -440,37 +389,6 @@ int InterfaceDataBaseLMS::delTrainee(int id)
int InterfaceDataBaseLMS::editTrainee(Trainee trainee)
{
//QMutexLocker mtxLocker(&mtxAccess);
//Проверка корректности логина, имени, пароля
if(trainee.getName() == QStringLiteral("<trainee>"))
{//Имя не корректно!
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("Unacceptable trainee name has been entered.\nThe changes will not be accepted."));
return 0;
}
if(trainee.getLogin() == QStringLiteral("<login>"))
{//Логин не корректен!
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("Unacceptable trainee login has been entered.\nThe changes will not be accepted."));
return 0;
}
if(trainee.getPassword() == QStringLiteral("<password>"))
{//Пароль не корректный!
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("Unacceptable trainee password has been entered.\nThe changes will not be accepted."));
return 0;
}
if(selectUserID(DataBaseLMS::TypeUserDBInstructor, trainee.getLogin()) || selectUserID(DataBaseLMS::TypeUserDBTrainee, trainee.getLogin()))
{//Логин уже существует!
QMessageBox::critical(ownerWidget, tr("Editing error!"),
tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted."));
return 0;
}
return updateTrainee(trainee);
}

View File

@@ -295,6 +295,16 @@ int ConnectorToServer::getIdTraineeByLogin(QString login)
return 0;
}
int ConnectorToServer::getIdInstructorByLogin(QString login)
{
for(Instructor instructor : listInstructors)
{
if(instructor.getLogin() == login)
return instructor.getID();
}
return 0;
}
void ConnectorToServer::showVersionSelect()
{
QByteArray answer = dataParser->xmlAnswer_notify(cmd_CheckVersionList);

View File

@@ -60,6 +60,7 @@ public:
Group getGroup(int id);
int getIdTraineeByLogin(QString login);
int getIdInstructorByLogin(QString login);
void showVersionSelect();
void setLoginName(QString name);

View File

@@ -270,7 +270,7 @@ bool EditorInstructors::verifyInstructor(Instructor instructor)
{
//Проверка корректности логина, имени, пароля
if(instructor.getName() == QStringLiteral("<instructor>"))
if(instructor.getName() == QStringLiteral("<name>"))
{//Имя не корректно!
QMessageBox::critical(this, tr("Editing error!"),
tr("Unacceptable instructor name has been entered.\nThe changes will not be accepted."));
@@ -292,23 +292,13 @@ bool EditorInstructors::verifyInstructor(Instructor instructor)
}
QList<Instructor> listInstructors = connectorToServer->getListInstructors();
for(Instructor exist_instructor : listInstructors)
{
if(instructor.getName() == exist_instructor.getName() && instructor.getID() != exist_instructor.getID())
{//Имя уже существует
QMessageBox::critical(this, tr("Editing error!"),
tr("An existing instructor name has been entered."));
return false;
}
if(instructor.getLogin() == exist_instructor.getLogin() && instructor.getID() != exist_instructor.getID())
{//Логин уже существует!
QMessageBox::critical(this, tr("Editing error!"),
tr("An existing instructor login has been entered.\nThe changes will not be accepted."));
return false;
}
int user_I = connectorToServer->getIdInstructorByLogin(instructor.getLogin());
int user_T = connectorToServer->getIdTraineeByLogin(instructor.getLogin());
if((user_I && (user_I != instructor.getID())) || (user_T && (user_T != instructor.getID())))
{//Логин уже существует!
QMessageBox::critical(this, tr("Editing error!"),
tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted."));
return 0;
}
return true;

View File

@@ -24,6 +24,13 @@ EditorTrainees::EditorTrainees(ConnectorToServer* connectorToServer, bool adminM
ui->btnArchive->click();
waitAnimationWidget->setParent(this);
ui->btnNewGroup->setEnabled(true);
ui->btnDeleteGroup->setEnabled(false);
ui->btnNewTrainee->setEnabled(false);
ui->btnDeleteTrainee->setEnabled(false);
ui->btnToOrFromArchiveTrainee->setEnabled(false);
ui->btnEdit->setEnabled(false);
}
EditorTrainees::~EditorTrainees()
@@ -448,7 +455,7 @@ bool EditorTrainees::verifyTrainee(Trainee trainee)
{
//Проверка корректности логина, имени, пароля
if(trainee.getName() == QStringLiteral("<trainee>"))
if(trainee.getName() == QStringLiteral("<name>"))
{//Имя не корректно!
QMessageBox::critical(this, tr("Editing error!"),
tr("Unacceptable trainee name has been entered.\nThe changes will not be accepted."));
@@ -469,23 +476,14 @@ bool EditorTrainees::verifyTrainee(Trainee trainee)
return false;
}
QList<Trainee> listTrainees = connectorToServer->getListTrainees();
for(Trainee exist_trainee : listTrainees)
{
if(trainee.getName() == exist_trainee.getName() && trainee.getID() != exist_trainee.getID())
{//Имя уже существует
QMessageBox::critical(this, tr("Editing error!"),
tr("An existing trainee name has been entered."));
return false;
}
if(trainee.getLogin() == exist_trainee.getLogin() && trainee.getID() != exist_trainee.getID())
{//Логин уже существует!
QMessageBox::critical(this, tr("Editing error!"),
tr("An existing trainee login has been entered.\nThe changes will not be accepted."));
return false;
}
int user_I = connectorToServer->getIdInstructorByLogin(trainee.getLogin());
int user_T = connectorToServer->getIdTraineeByLogin(trainee.getLogin());
if((user_I && (user_I != trainee.getID())) || (user_T && (user_T != trainee.getID())))
{//Логин уже существует!
QMessageBox::critical(this, tr("Editing error!"),
tr("An existing instructor or trainee login has been entered.\nThe changes will not be accepted."));
return 0;
}
return true;

View File

@@ -8,10 +8,7 @@ ProcessingSystem::ProcessingSystem(ProviderDBLMS* providerDBLMS, UpdateControlle
updateController(nullptr),
providerDBLMS(nullptr)
{
//this->providerDBLMS = providerDBLMS;
this->providerDBLMS = providerDBLMS;
this->updateController = updateController;
}
@@ -20,10 +17,6 @@ void ProcessingSystem::initialize(MultiThreadServer *server, DataParser *dataPar
UpdateController *updateController,
ChatSystem *chatSystem)
{
this->providerDBLMS = new ProviderDBLMS(/*parent*/nullptr);
this->providerDBLMS->ConnectionToDB();
this->providerDBLMS->deAuthorizationAll();
this->commonClientServer = commonClientHandler;
this->dataParser = dataParser;
this->server = server;

View File

@@ -224,18 +224,32 @@ bool ProviderDBLMS::deAuthorizationAll()
bool ProviderDBLMS::entryTraineeOnSimulator(int id_trainee)
{
mtxAccess.lock();
if(dbLMS->entryTraineeOnSimulator(id_trainee))
{
mtxAccess.unlock();
return true;
}
else
{
mtxAccess.unlock();
return false;
}
}
bool ProviderDBLMS::exitTraineeFromSimulator(int id_trainee)
{
mtxAccess.lock();
if(dbLMS->exitTraineeFromSimulator(id_trainee))
{
mtxAccess.unlock();
return true;
}
else
{
mtxAccess.unlock();
return false;
}
}
int ProviderDBLMS::getIdTraineeByLogin(QString login)
@@ -348,92 +362,164 @@ QList<Group> ProviderDBLMS::GetListAllGroups()
int ProviderDBLMS::newInstructor()
{
return dbLMS->newInstructor();
int res = 0;
mtxAccess.lock();
res = dbLMS->newInstructor();
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::delInstructor(int id)
{
return dbLMS->delInstructor(id);
int res = 0;
mtxAccess.lock();
res = dbLMS->delInstructor(id);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::editInstructor(Instructor instructor)
{
return dbLMS->editInstructor(instructor);
int res = 0;
mtxAccess.lock();
res = dbLMS->editInstructor(instructor);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::newTrainee(int id_group)
{
return dbLMS->newTrainee(id_group);
int res = 0;
mtxAccess.lock();
res = dbLMS->newTrainee(id_group);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::delTrainee(int id)
{
return dbLMS->delTrainee(id);
int res = 0;
mtxAccess.lock();
res = dbLMS->delTrainee(id);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::editTrainee(Trainee trainee)
{
return dbLMS->editTrainee(trainee);
int res = 0;
mtxAccess.lock();
res = dbLMS->editTrainee(trainee);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::newGroup()
{
return dbLMS->newGroup();
int res = 0;
mtxAccess.lock();
res = dbLMS->newGroup();
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::delGroup(int id)
{
return dbLMS->delGroup(id);
int res = 0;
mtxAccess.lock();
res = dbLMS->delGroup(id);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::editGroup(Group group)
{
return dbLMS->editGroup(group);
int res = 0;
mtxAccess.lock();
res = dbLMS->editGroup(group);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::newTaskAMM(TaskAmmFim task, int id_trainee)
{
return dbLMS->newTaskAMM(task, id_trainee);
int res = 0;
mtxAccess.lock();
res = dbLMS->newTaskAMM(task, id_trainee);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::delTaskAMM(int id)
{
return dbLMS->delTaskAMM(id);
int res = 0;
mtxAccess.lock();
res = dbLMS->delTaskAMM(id);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::editTaskAMM(TaskAmmFim task)
{
return dbLMS->editTaskAMM(task);
int res = 0;
mtxAccess.lock();
res = dbLMS->editTaskAMM(task);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::newTaskFIM(TaskAmmFim task, int id_trainee)
{
return dbLMS->newTaskFIM(task, id_trainee);
int res = 0;
mtxAccess.lock();
res = dbLMS->newTaskFIM(task, id_trainee);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::delTaskFIM(int id)
{
return dbLMS->delTaskFIM(id);
int res = 0;
mtxAccess.lock();
res = dbLMS->delTaskFIM(id);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::editTaskFIM(TaskAmmFim task)
{
return dbLMS->editTaskFIM(task);
int res = 0;
mtxAccess.lock();
res = dbLMS->editTaskFIM(task);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::replaceReportFIM(TaskAmmFim task)
{
return dbLMS->replaceReportFIM(task);
int res = 0;
mtxAccess.lock();
res = dbLMS->replaceReportFIM(task);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::changeStatusTaskFIM(int id_task, QString status)
{
return dbLMS->changeStatusTaskFIM(id_task, status);
int res = 0;
mtxAccess.lock();
res = dbLMS->changeStatusTaskFIM(id_task, status);
mtxAccess.unlock();
return res;
}
int ProviderDBLMS::changeStatusTaskAMM(int id_task, QString status)
{
return dbLMS->changeStatusTaskAMM(id_task, status);
int res = 0;
mtxAccess.lock();
res = dbLMS->changeStatusTaskAMM(id_task, status);
mtxAccess.unlock();
return res;
}
QList<TaskAmmFim> ProviderDBLMS::GetListTasksAMMofTrainee(int id_trainee)

View File

@@ -16,8 +16,8 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
loggerThread(nullptr),
dataParser(nullptr),
processingSystem(nullptr),
updateController(nullptr)//,
//providerDBLMS(nullptr)
updateController(nullptr),
providerDBLMS(nullptr)
{
ui->setupUi(this);
mutex = new QMutex;
@@ -37,13 +37,13 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
updateThread = new QThread;
loggerThread = new QThread;
//providerDBLMS = new ProviderDBLMS(this);
//providerDBLMS->ConnectionToDB();
//providerDBLMS->deAuthorizationAll();
providerDBLMS = new ProviderDBLMS(this);
providerDBLMS->ConnectionToDB();
providerDBLMS->deAuthorizationAll();
chatSystem = new ChatSystem();
//connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization);
connect(providerDBLMS, &ProviderDBLMS::signal_BlockAutorization, this, &ServerLMSWidget::slot_BlockAutorization);
assetsManager = new AssetsManager;
assetsManager->moveToThread(updateThread);
@@ -51,9 +51,8 @@ ServerLMSWidget::ServerLMSWidget(QWidget *parent) :
updateController = new UpdateController;
updateController->moveToThread(updateThread);
processingSystem = new ProcessingSystem(/*providerDBLMS*/nullptr, updateController);
processingSystem = new ProcessingSystem(providerDBLMS, updateController);
//processingSystem->moveToThread(updateThread);
//providerDBLMS->moveToThread(updateThread);
dataParser = new DataParser(assetsManager,processingSystem);

View File

@@ -103,7 +103,7 @@ private:
CommonClientHandler *commonClientHandler;
ChatSystem *chatSystem;
//ProviderDBLMS* providerDBLMS;
ProviderDBLMS* providerDBLMS;
bool first = true; // для тестов Unity