#include "sysrolemgtthread.h" #include #include #include #include #include #include SysRoleMgtThread::SysRoleMgtThread(QObject *iParent) : TopClassThreadAbs(iParent) { } SysRoleMgtThread::~SysRoleMgtThread() { } void SysRoleMgtThread::run() { if (invokeName() == "DELETE") { deleteItem(); } else if (invokeName() == "CLEAR") { clearUnusedRgts(); } } void SysRoleMgtThread::deleteItem() { TDataResponse dataRes; TSqlQueryV2 sqlQuery(T_SQLCNT_POOL->getSqlDatabase()); sqlQuery.begin(); try { TSqlDeleterV2 sqlDeleter; sqlDeleter.setTable("sys_role"); sqlDeleter.setWhere("id", invokeParameter()); sqlQuery.deleteRow(sqlDeleter); if (sqlQuery.lastError().isValid()) { throw sqlQuery.lastError(); } sqlDeleter.clear(); sqlDeleter.setTable("sys_role_map_permission"); sqlDeleter.setWhere("role_id", invokeParameter()); sqlQuery.deleteRow(sqlDeleter); if (sqlQuery.lastError().isValid()) { throw sqlQuery.lastError(); } sqlDeleter.clear(); sqlDeleter.setTable("sys_role_map_user"); sqlDeleter.setWhere("role_id", invokeParameter()); sqlQuery.deleteRow(sqlDeleter); if (sqlQuery.lastError().isValid()) { throw sqlQuery.lastError(); } sqlQuery.commit(); setInvokeResult(dataRes.toVariantMap()); return; } catch (const TError &err) { dataRes.setError(err); } catch (...) { dataRes.setErrText(ttr("Unknow Error!")); } sqlQuery.rollback(); setInvokeResult(dataRes.toVariantMap()); } void SysRoleMgtThread::clearUnusedRgts() { TDataResponse dataRes; TSqlQueryV2 localSqlQuery(T_SQLCNT_POOL->getSqlDatabase(LOCALDB_CONNECTION_NAME)); localSqlQuery.begin(); TSqlQueryV2 cloudSqlQuery(T_SQLCNT_POOL->getSqlDatabase()); cloudSqlQuery.begin(); try { TSqlDeleterV2 sqlDeleter; //删除云上无用action sqlDeleter.setTable("sys_setting_action"); sqlDeleter.setWhere("module_name NOT IN (select module_name from sys_setting_module GROUP by module_name)"); cloudSqlQuery.deleteRow(sqlDeleter); if (cloudSqlQuery.lastError().isValid()) { throw cloudSqlQuery.lastError(); } //删除本地无用action sqlDeleter.clear(); sqlDeleter.setTable("sys_setting_action"); sqlDeleter.setWhere("module_name NOT IN (select module_name from sys_setting_module GROUP by module_name)"); localSqlQuery.deleteRow(sqlDeleter); if (localSqlQuery.lastError().isValid()) { throw localSqlQuery.lastError(); } //获取已使用的权限 QStringList permissionList; TSqlSelectorV2 sqlSelector; sqlSelector.setTable("sys_setting_action"); sqlSelector.setField("attr"); sqlSelector.addWhere("module_name in (select module_name from sys_setting_module GROUP by module_name)"); QVariant actions = localSqlQuery.selectArrayValue(sqlSelector); if (localSqlQuery.lastError().isValid()) { throw localSqlQuery.lastError(); } QStringList actionList = actions.toStringList(); for (QString str : actionList) { QVariantMap action = TDataParse::jsonStr2Variant(str).toMap(); permissionList.append(action["PERMISSION"].toString()); } sqlSelector.clear(); sqlSelector.setTable("sys_setting_module"); sqlSelector.setField("conf"); QVariant modules = localSqlQuery.selectArrayValue(sqlSelector); if (localSqlQuery.lastError().isValid()) { throw localSqlQuery.lastError(); } QStringList moduleList = modules.toStringList(); for (QString str : moduleList) { QVariantMap module = TDataParse::jsonStr2Variant(str).toMap(); permissionList.append(module["sys_open_right"].toString()); for (QVariant val: module["sys_permission_list"].toList()) { permissionList.append(val.toString()); } } QString permissionStr = "'" + permissionList.join("','") + "'"; //删除云上无用权限 sqlSelector.clear(); sqlDeleter.setTable("sys_setting_permission"); sqlDeleter.setWhere("permission_name NOT IN (" + permissionStr + ")"); cloudSqlQuery.deleteRow(sqlDeleter); if (cloudSqlQuery.lastError().isValid()) { throw cloudSqlQuery.lastError(); } sqlDeleter.setTable("sys_role_map_permission"); cloudSqlQuery.deleteRow(sqlDeleter); if (cloudSqlQuery.lastError().isValid()) { throw cloudSqlQuery.lastError(); } //删除本地无用权限 sqlDeleter.setTable("sys_setting_permission"); sqlDeleter.setWhere("permission_name NOT IN (" + permissionStr + ")"); localSqlQuery.deleteRow(sqlDeleter); if (localSqlQuery.lastError().isValid()) { throw localSqlQuery.lastError(); } localSqlQuery.commit(); cloudSqlQuery.commit(); setInvokeResult(dataRes.toVariantMap()); return; } catch (const TError &err) { dataRes.setError(err); } catch (...) { dataRes.setErrText(ttr("Unknow Error!")); } cloudSqlQuery.rollback(); localSqlQuery.rollback(); setInvokeResult(dataRes.toVariantMap()); }