最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Qt使用SqlLite實現(xiàn)權(quán)限管理的示例代碼

 更新時間:2023年09月03日 11:17:26   作者:從前,有個傻子........  
本文主要介紹了Qt使用SqlLite實現(xiàn)權(quán)限管理的示例代碼,管理員針對不同人員進行權(quán)限設(shè)定,具有一定的參考價值,感興趣的可以了解一下

根據(jù)Sqlite輕量級數(shù)據(jù)庫的優(yōu)勢,便于對于數(shù)據(jù)進行增刪改查等操作。

本例模擬權(quán)限列表對不同界面進行權(quán)限管理,管理員針對不同人員進行權(quán)限設(shè)定,靈活性更高。

動態(tài)演示效果如下

考慮數(shù)據(jù)庫數(shù)據(jù)安全,可進行哈希散列值計算進行加密,Qt提供QCryptographicHash類進行數(shù)據(jù)加密,本例中使用的加密函數(shù)為:

QString SqlHelper::encode(QString str) {
	QString strPwdSha = "";
	if (str == "") {
		return "";
	}
	QByteArray bytePwd = str.toLatin1();
	QByteArray bytePwdSha = QCryptographicHash::hash(bytePwd, QCryptographicHash::Sha256);
	strPwdSha = bytePwdSha.toHex().toUpper();
	return strPwdSha;
}
QString SqlHelper::encodePwd(QString str) {
	if (str == "") {
		return "";
	}
	QString endata = encode(str);
	QString strdata = "";
	for (int i = 0; i < endata.size(); i++) {
		if (i % 4 == 0) {
			strdata += endata[i];
		}
	}
	return strdata + "SAP";
}

初始化數(shù)據(jù)庫:

void SqlHelper::connectDataBase() {
	db = QSqlDatabase::addDatabase("QSQLITE", "sqlite1");// 驅(qū)動類型,連接名(默認)
	db.setDatabaseName("DbData/data.db");
	db.setHostName("localhost.");
	db.setUserName("root");
	db.setPassword("123456");
	m_DbState = db.open();
}

創(chuàng)建數(shù)據(jù)表:

void SqlHelper::IniSql() {
	QSqlQuery query(db);
	QString strCmd = QString("create table employee(employee_id varchar(64) primary key,"
		"employee_name varchar(64),employee_pass varchar(32),employee_settingrole varchar(16),"
		"employee_menurole varchar(16),employee_logrole varchar(16),employee_sex varchar(16))");
	query.prepare(strCmd);
	if (query.exec())
	{
		qDebug() << "----employee 數(shù)據(jù)庫表:創(chuàng)建成功!";
		insertData("admin", "root", "root123456", 1,1,1,"male");
	}
	else {
		qDebug() << "----employee 數(shù)據(jù)表已經(jīng)存在-----";
	}
}

插入數(shù)據(jù):

bool SqlHelper::insertData(QString userid, QString username, QString userpass, int sflag, int mflag, int lflag, QString usersex) {
	if (!m_DbState) {
		return false;
	}
	QList<employeeInfo> list = queryAllInfo();
	m_mutex.lock();
	bool flag = false;
	//qDebug() << "m_id:  " << m_id;
	QSqlQuery query(db);
	QString str = QString("insert into employee values(?,?,?,?,?,?,?)");
	query.prepare(str);
	//query.bindValue(0, list.size() + 1);
	query.bindValue(0, userid);
	query.bindValue(1, username);
	QString pass = encodePwd(userpass);
	query.bindValue(2, pass);
	QString setrole = userid;
	setrole.append(QString::number(sflag));
	setrole = encodeRole(setrole,RoleType::SettingRole);
	query.bindValue(3, setrole);
	QString mrole = userid;
	mrole.append(QString::number(mflag));
	mrole = encodeRole(mrole, RoleType::MenuRole);
	query.bindValue(4, mrole);
	QString lrole = userid;
	lrole.append(QString::number(lflag));
	lrole = encodeRole(lrole, RoleType::LogRole);
	query.bindValue(5, lrole);
	query.bindValue(6, usersex);
		if (query.exec()) {
		qDebug() << "插入數(shù)據(jù)成功----";
		flag = true;
	}
	else {
		qDebug() << "插入數(shù)據(jù)失敗----";
	}
	m_mutex.unlock();
	//qDebug() << "777777777777777777777777";
	return flag;
}

可使用結(jié)構(gòu)體對數(shù)據(jù)信息進行封裝:

struct employeeInfo {
	QString employee_id = "";
	QString employee_name;
	QString employee_pass;
	QString employee_settingrole;
	QString employee_menurole;
	QString employee_logrole;
	QString employee_sex;
}; 

數(shù)據(jù)庫查詢函數(shù)為:

QList<employeeInfo> SqlHelper::queryAllInfo() {
	QList<employeeInfo> list;
	if (!m_DbState) {
		return list;
	}
	m_mutex.lock();
	QSqlQuery query(db);
	QString str = "select * from employee";
	query.prepare(str);
	if (query.exec()) {
		while (query.next()) {
			//qDebug() << "name---" << query.value(1).toString() << " age-" << query.value(2).toInt();
			employeeInfo employee;
			employee.employee_id = query.value(0).toString();
			employee.employee_name = query.value(1).toString();
			employee.employee_pass = query.value(2).toString();
			employee.employee_settingrole = query.value(3).toString();
			employee.employee_menurole = query.value(4).toString();
			employee.employee_logrole = query.value(5).toString();
			employee.employee_sex = query.value(6).toString();
			list.append(employee);
		}
	}
	m_mutex.unlock();
	return list;
}
employeeInfo SqlHelper::queryOne(QString userid) {
	employeeInfo employee;
	if (!m_DbState) {
		return employee;
	}
	m_mutex.lock();
	QSqlQuery query(db);
	QString str = "select * from employee where employee_id =?";
	query.prepare(str);
	query.addBindValue(userid);
		if (query.exec()) {
		while (query.next()) {
			employee.employee_id = query.value(0).toString();
			employee.employee_name = query.value(1).toString();
			employee.employee_pass = query.value(2).toString();
			employee.employee_settingrole = query.value(3).toString();
			employee.employee_menurole = query.value(4).toString();
			employee.employee_logrole = query.value(5).toString();
			employee.employee_sex = query.value(6).toString();
		}
	}
	m_mutex.unlock();
	return employee;
}

數(shù)據(jù)庫更新數(shù)據(jù)函數(shù)為:

bool SqlHelper::updateData(QString userid, QString username, QString userpass, int sflag ,int mflag, int lflag, QString usersex) {
	if (!m_DbState) {
		return false;
	}
	QSqlQuery query(db);
	QString str = "update employee set employee_name =?,employee_pass=?,"
		"employee_settingrole=?,employee_menurole=?,employee_logrole=? , employee_sex = ? where employee_id =?";
	query.prepare(str);
	query.addBindValue(username);
	QString ss = queryPass(userid);
	m_mutex.lock();
	bool flag = false;
	if (ss == userpass) {
		query.addBindValue(ss);
	}
	else {
		userpass = encodePwd(userpass);
		query.addBindValue(userpass);
	}
	QString nsr = userid;
	nsr.append(QString::number(sflag));
	nsr = encodeRole(nsr, RoleType::SettingRole);
	query.addBindValue(nsr);
	QString nmr = userid;
	nmr.append(QString::number(mflag));
	nmr = encodeRole(nmr, RoleType::MenuRole);
	query.addBindValue(nmr);
	QString nlr = userid;
	nlr.append(QString::number(lflag));
	nlr = encodeRole(nlr, RoleType::LogRole);
	query.addBindValue(nlr);
	query.addBindValue(usersex);
	query.addBindValue(userid);
	if (query.exec()) {
		flag = true;
		qDebug() << "更新成功---";
	}
	else {
		flag = false;
		qDebug() << "更新失敗---";
	}
	m_mutex.unlock();
	return flag;
}

刪除數(shù)據(jù)函數(shù)為:

bool SqlHelper::deleteData(QString userid) {
	if (!m_DbState) {
		return false;
	}
	employeeInfo one = queryOne(userid);
	if (one.employee_id == "") {
		qDebug() << "此人已刪除----";
		return false;
	}
	m_mutex.lock();
	bool flag = false;
	QSqlQuery query(db);
	QString str = "delete from employee where employee_id=?";
	query.prepare(str);
	query.addBindValue(userid);
	if (query.exec()) {
		flag = true;
		qDebug() << "刪除成功---";
	}
	else {
		flag = false;
		qDebug() << "刪除失敗---";
	}
	m_mutex.unlock();
	return flag;
}

 到此這篇關(guān)于Qt使用SqlLite實現(xiàn)權(quán)限管理的示例代碼的文章就介紹到這了,更多相關(guān)Qt SqlLite權(quán)限管理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C語言通訊錄管理系統(tǒng)完整版

    C語言通訊錄管理系統(tǒng)完整版

    這篇文章主要為大家詳細介紹了C語言通訊錄管理系統(tǒng)的完整版本,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • c++ For循環(huán)執(zhí)行順序流程圖解

    c++ For循環(huán)執(zhí)行順序流程圖解

    for 循環(huán)允許您編寫一個執(zhí)行特定次數(shù)的循環(huán)的重復(fù)控制結(jié)構(gòu),這里為大家分享一下具體的執(zhí)行流程,需要的朋友可以參考下
    2021-10-10
  • C?語言實現(xiàn)猜數(shù)字小游戲完整示例代碼

    C?語言實現(xiàn)猜數(shù)字小游戲完整示例代碼

    這篇文章主要介紹了如何使用C語言生成1到100之間的隨機數(shù),并提供了一個簡單的猜數(shù)字游戲的實現(xiàn)代碼,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-03-03
  • C++字符串輸入緩沖區(qū)機制詳解

    C++字符串輸入緩沖區(qū)機制詳解

    緩沖區(qū)是用來存放流中的數(shù)據(jù),本文詳細的介紹了C++字符串輸入緩沖區(qū)機制,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2021-10-10
  • C語言命令行參數(shù)的使用詳解

    C語言命令行參數(shù)的使用詳解

    本文主要介紹了C語言命令行參數(shù)的使用詳解,文中通過示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • C++ Boost實現(xiàn)數(shù)字與字符串轉(zhuǎn)化詳解

    C++ Boost實現(xiàn)數(shù)字與字符串轉(zhuǎn)化詳解

    Boost是為C++語言標準庫提供擴展的一些C++程序庫的總稱。Boost庫是一個可移植、提供源代碼的C++庫,作為標準庫的后備,是C++標準化進程的開發(fā)引擎之一,是為C++語言標準庫提供擴展的一些C++程序庫的總稱
    2022-11-11
  • C++實現(xiàn)LeetCode(123.買股票的最佳時間之三)

    C++實現(xiàn)LeetCode(123.買股票的最佳時間之三)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(123.買股票的最佳時間之三),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C/C++ 中sizeof(''a'')對比詳細介紹

    C/C++ 中sizeof(''a'')對比詳細介紹

    這篇文章主要介紹了C/C++ 中sizeof('a')的值對比詳細介紹的相關(guān)資料,需要的朋友可以參考下
    2017-02-02
  • C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式

    C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式

    這篇文章主要介紹了C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11
  • c/c++ 函數(shù)返回指針和引用所引發(fā)的問題

    c/c++ 函數(shù)返回指針和引用所引發(fā)的問題

    本文主要介紹了c/c++ 函數(shù)返回指針和引用所引發(fā)的問題,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-05-05

最新評論

汝阳县| 庄河市| 柳江县| 廊坊市| 封丘县| 仁怀市| 怀化市| 咸宁市| 大关县| 内乡县| 繁峙县| 横山县| 招远市| 五原县| 大姚县| 广昌县| 凌源市| 大英县| 黄冈市| 读书| 邓州市| 原平市| 永州市| 南投县| 绩溪县| 瑞丽市| 秦皇岛市| 大洼县| 兖州市| 台湾省| 沭阳县| 西林县| 吉林市| 吴江市| 兴山县| 平果县| 昂仁县| 仁布县| 华池县| 娱乐| 综艺|