Qt使用SqlLite實(shí)現(xiàn)權(quán)限管理的示例代碼
根據(jù)Sqlite輕量級(jí)數(shù)據(jù)庫(kù)的優(yōu)勢(shì),便于對(duì)于數(shù)據(jù)進(jìn)行增刪改查等操作。
本例模擬權(quán)限列表對(duì)不同界面進(jìn)行權(quán)限管理,管理員針對(duì)不同人員進(jìn)行權(quán)限設(shè)定,靈活性更高。
動(dòng)態(tài)演示效果如下
考慮數(shù)據(jù)庫(kù)數(shù)據(jù)安全,可進(jìn)行哈希散列值計(jì)算進(jìn)行加密,Qt提供QCryptographicHash類進(jìn)行數(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ù)庫(kù):
void SqlHelper::connectDataBase() { db = QSqlDatabase::addDatabase("QSQLITE", "sqlite1");// 驅(qū)動(dòng)類型,連接名(默認(rèn)) 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ù)庫(kù)表:創(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)體對(duì)數(shù)據(jù)信息進(jìn)行封裝:
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ù)庫(kù)查詢函數(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ù)庫(kù)更新數(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實(shí)現(xiàn)權(quán)限管理的示例代碼的文章就介紹到這了,更多相關(guān)Qt SqlLite權(quán)限管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Matlab制作視頻并轉(zhuǎn)換成gif動(dòng)態(tài)圖的兩種方法
這篇文章主要介紹了Matlab制作視頻并轉(zhuǎn)換成gif動(dòng)態(tài)圖的兩種方法,第一種方法使用movie(f)直接取生成AVI視頻文件,相對(duì)來(lái)說(shuō)比較簡(jiǎn)單,需要的朋友可以參考下2018-08-08Java C++題解leetcode915分割數(shù)組示例
這篇文章主要為大家介紹了Java C++題解leetcode915分割數(shù)組示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-11-11VSCode搭建C/C++編譯環(huán)境的詳細(xì)教程
Visual Studio Code是一款免費(fèi)開源的現(xiàn)代化輕量級(jí)代碼編輯器,支持幾乎所有主流的開發(fā)語(yǔ)言的語(yǔ)法高亮、智能代碼補(bǔ)全、自定義熱鍵、括號(hào)匹配、代碼片段、代碼對(duì)比 Diff、GIT 等特性,這篇文章主要介紹了VSCode搭建C/C++編譯環(huán)境,需要的朋友可以參考下2020-05-05C++關(guān)鍵字之likely和unlikely詳解
這篇文章主要介紹了C++關(guān)鍵字之likely和unlikely,C++20之前的,likely和unlikely只不過(guò)是一對(duì)自定義的宏,而C++20中正式將likely和unlikely確定為屬性關(guān)鍵字,本文給大家詳細(xì)講解,需要的朋友可以參考下2022-10-10基于QT制作一個(gè)TCPServer與TCPClient的通信
這篇文章主要為大家詳細(xì)介紹了如何基于QT制作一個(gè)TCPServer與TCPClient的通信,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-12-12