Qt编写物联网管理平台31-用户权限管理
一、前言
隨著需求的不斷變化,功能的增多,在用戶信息這塊,除了需要用戶登錄退出驗證以外,還需要有個簡單的用戶權限邏輯處理,比如限定某些用戶只有查看權限,沒有刪除記錄、清空記錄、系統設置的權限,與之相對應的就是用戶信息表中,存儲有該用戶具備哪些權限,當該用戶登錄成功以后,對應的權限應用到各個界面邏輯中,一般都是在觸發了對應的顯示或者單擊后處理,比如不具備刪除記錄權限,則在對應的刪除記錄代碼中過濾處理,判斷當前登錄的用戶是否具備該權限,不具備則彈出提示,不做處理。還有一個就是切換界面的時候,沒有到該界面的權限彈出提示,并仍然停留在上一個界面。
在十幾年的從業生涯中,最開始編程的時候,也做過簡單的權限管理,思路極其簡單那就是根據用戶類型寫死,比如某個用戶是管理員類型,則具備所有權限,某個用戶是操作員類型,則不能有刪除記錄、用戶管理的權限。好處是容易理解,邏輯簡單到爆,缺點是代碼寫死,不能動態控制某個擁有某個模塊的權限。暫且將這種處理叫做v0.1版本。
為了能夠更進一步的拓展功能,后面修改過用戶權限管理,暫且稱為v0.2版本。在用戶信息表中增加了一個用戶權限字段,字符串表示 1|0|1 之類的,按照順序約定對應位是哪個模塊,1表示有該模塊的權限,0表示沒有權限,相對于v0.1版本的時候,可以控制不同模塊的權限,相對靈活一些,但是還是不夠通用,對約定的要求極其嚴格。
于是來到了現在的v0.3版本,索性增加了7個用戶權限字段,對應用戶7種模塊權限,至于該種權限是對應哪個模塊,填入對應的字符串名稱就行,這樣可以做一個通用的權限校驗功能,不用用戶權限驗證代碼寫的到處都是,用戶擁有該名稱的權限則通過,不具備則彈出提示,一般常規的權限就有系統設置、刪除記錄、用戶管理。
二、功能特點
2.1 軟件模塊
2.2 基礎功能
2.3 特色功能
三、體驗地址
四、效果圖
五、相關代碼
#include "userhelper.h" #include "quihelper.h"QString UserHelper::CurrentUserName = "admin"; QString UserHelper::CurrentUserPwd = "admin"; QString UserHelper::CurrentUserType = QString::fromUtf8("管理員"); QList<bool> UserHelper::UserPermission = QList<bool>() << true << true << true << true << true << true << true; QStringList UserHelper::PermissionName = QStringList() << QString::fromUtf8("系統設置|刪除記錄|模塊A|模塊B|模塊C|模塊D|模塊E").split("|");int UserHelper::UserInfo_Count = 0; QList<QString> UserHelper::UserInfo_UserName = QList<QString>(); QList<QString> UserHelper::UserInfo_UserPwd = QList<QString>(); QList<QString> UserHelper::UserInfo_UserType = QList<QString>(); QList<QString> UserHelper::UserInfo_Permission1 = QList<QString>(); QList<QString> UserHelper::UserInfo_Permission2 = QList<QString>(); QList<QString> UserHelper::UserInfo_Permission3 = QList<QString>(); QList<QString> UserHelper::UserInfo_Permission4 = QList<QString>(); QList<QString> UserHelper::UserInfo_Permission5 = QList<QString>(); QList<QString> UserHelper::UserInfo_Permission6 = QList<QString>(); QList<QString> UserHelper::UserInfo_Permission7 = QList<QString>();void UserHelper::loadUserInfo() {UserHelper::UserInfo_Count = 0;UserHelper::UserInfo_UserName.clear();UserHelper::UserInfo_UserPwd.clear();UserHelper::UserInfo_UserType.clear();UserHelper::UserInfo_Permission1.clear();UserHelper::UserInfo_Permission2.clear();UserHelper::UserInfo_Permission3.clear();UserHelper::UserInfo_Permission4.clear();UserHelper::UserInfo_Permission5.clear();UserHelper::UserInfo_Permission6.clear();UserHelper::UserInfo_Permission7.clear();QString column = "Permission1,Permission2,Permission3,Permission4,Permission5,Permission6,Permission7";QString sql = QString("select UserName,UserPwd,UserType,%1 from UserInfo").arg(column);QSqlQuery query;if (!query.exec(sql)) {qDebug() << TIMEMS << query.lastError().text() << sql;return;}while (query.next()) {QString userName = query.value(0).toString();QString userPwd = query.value(1).toString();QString userType = query.value(2).toString();QString permission1 = query.value(3).toString();QString permission2 = query.value(4).toString();QString permission3 = query.value(5).toString();QString permission4 = query.value(6).toString();QString permission5 = query.value(7).toString();QString permission6 = query.value(8).toString();QString permission7 = query.value(9).toString();UserHelper::UserInfo_Count++;UserHelper::UserInfo_UserName << userName;UserHelper::UserInfo_UserPwd << userPwd;UserHelper::UserInfo_UserType << userType;UserHelper::UserInfo_Permission1 << permission1;UserHelper::UserInfo_Permission2 << permission2;UserHelper::UserInfo_Permission3 << permission3;UserHelper::UserInfo_Permission4 << permission4;UserHelper::UserInfo_Permission5 << permission5;UserHelper::UserInfo_Permission6 << permission6;UserHelper::UserInfo_Permission7 << permission7;} }void UserHelper::clearUserInfo() {QString sql = "delete from UserInfo where UserName!='admin'";DbHelper::execSql(sql); }void UserHelper::updateUserInfo(const QString &userName, const QString &userPwd) {QString sql = QString("update UserInfo set UserPwd='%1' where UserName='%2'").arg(userPwd).arg(userName);DbHelper::execSql(sql); }void UserHelper::getUserInfo() {UserHelper::getUserInfo(UserHelper::CurrentUserName, UserHelper::CurrentUserPwd, UserHelper::CurrentUserType, UserHelper::UserPermission); }void UserHelper::getUserInfo(const QString &userName, QString &userPwd, QString &userType, QList<bool> &permission) {QString column = "Permission1,Permission2,Permission3,Permission4,Permission5,Permission6,Permission7";QString sql = QString("select UserPwd,UserType,%1 from UserInfo where UserName='%2'").arg(column).arg(userName);QSqlQuery query;if (!query.exec(sql)) {qDebug() << TIMEMS << query.lastError().text() << sql;return;}if (query.next()) {userPwd = query.value(0).toString();userType = query.value(1).toString();for (int i = 0; i < 7; ++i) {permission[i] = (query.value(i + 2).toString() == "啟用");}}//qDebug() << TIMEMS << UserHelper::CurrentUserName << UserHelper::CurrentUserPwd << UserHelper::CurrentUserType << UserHelper::UserPermission; }bool UserHelper::checkPermission(const QString &text) {//從權限模塊名稱找到當前模塊是否需要授權//可能對應按鈕的文本有空格要去掉再比較 比如權限文本設定的是 用戶管理 而實際按鈕是 用 戶 管 理QString flag = text; #if (QT_VERSION >= QT_VERSION_CHECK(6,0,0))flag.remove(QRegularExpression("\\s")); #elseflag.remove(QRegExp("\\s")); #endifint index = UserHelper::PermissionName.indexOf(flag);if (index >= 0) {if (!UserHelper::UserPermission.at(index)) {QUIHelper::showMessageBoxError(QString("當前用戶沒有 [%1] 權限!").arg(text), 3);return false;}}return true; }總結
以上是生活随笔為你收集整理的Qt编写物联网管理平台31-用户权限管理的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 基于树莓派采集网关1
- 下一篇: 亲民地理-第44期-美国的车文化_我是亲