Qt使用SqlLite實(shí)現(xiàn)權(quán)限管理的示例代碼
根據(jù)Sqlite輕量級(jí)數(shù)據(jù)庫的優(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ù)庫數(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ù)庫:
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ù)庫表:創(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ù)庫查詢函數(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實(shí)現(xiàn)權(quán)限管理的示例代碼的文章就介紹到這了,更多相關(guān)Qt SqlLite權(quán)限管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C?語言實(shí)現(xiàn)猜數(shù)字小游戲完整示例代碼
這篇文章主要介紹了如何使用C語言生成1到100之間的隨機(jī)數(shù),并提供了一個(gè)簡(jiǎn)單的猜數(shù)字游戲的實(shí)現(xiàn)代碼,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-03-03
C++ Boost實(shí)現(xiàn)數(shù)字與字符串轉(zhuǎn)化詳解
Boost是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱。Boost庫是一個(gè)可移植、提供源代碼的C++庫,作為標(biāo)準(zhǔn)庫的后備,是C++標(biāo)準(zhǔn)化進(jìn)程的開發(fā)引擎之一,是為C++語言標(biāo)準(zhǔn)庫提供擴(kuò)展的一些C++程序庫的總稱2022-11-11
C++實(shí)現(xiàn)LeetCode(123.買股票的最佳時(shí)間之三)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(123.買股票的最佳時(shí)間之三),本篇文章通過簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07
C/C++ 中sizeof(''a'')對(duì)比詳細(xì)介紹
這篇文章主要介紹了C/C++ 中sizeof('a')的值對(duì)比詳細(xì)介紹的相關(guān)資料,需要的朋友可以參考下2017-02-02
C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式
這篇文章主要介紹了C++11?成員函數(shù)作為回調(diào)函數(shù)的使用方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2022-11-11
c/c++ 函數(shù)返回指針和引用所引發(fā)的問題
本文主要介紹了c/c++ 函數(shù)返回指針和引用所引發(fā)的問題,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2026-05-05

