chenluhua1980
2026-01-19 44360bc2cdeee16be72f9cc4bfb42e0ac26b5b44
SourceCode/Bond/Servo/UserManager.h
@@ -1,4 +1,4 @@
#ifndef USER_MANAGER_H
#ifndef USER_MANAGER_H
#define USER_MANAGER_H
#include <string>
@@ -7,126 +7,126 @@
#include <windows.h>
#include "Database.h"
// 用户角色定义
// 用户角色定义
enum class UserRole {
    SuperAdmin = 0,   // 超级管理员:系统最高权限,管理所有用户和权限
    ProcessEngineer,  // 制程工程师:负责工艺制定与优化
    EquipmentEngineer,// 设备工程师:负责设备维护与技术支持
    Operator,         // 操作员:执行日常生产操作
    Unknown           // 未知角色:默认或未识别的角色
   SuperAdmin = 0,   // 超级管理员:系统最高权限,管理所有用户和权限
   ProcessEngineer,  // 制程工程师:负责工艺制定与优化
   EquipmentEngineer,// 设备工程师:负责设备维护与技术支持
   Operator,         // 操作员:执行日常生产操作
   Unknown           // 未知角色:默认或未识别的角色
};
// 用户管理类,采用单例模式
// 用户管理类,采用单例模式
class UserManager {
public:
    static UserManager& getInstance();
   static UserManager& getInstance();
    UserManager(const UserManager&) = delete;
    UserManager& operator=(const UserManager&) = delete;
   UserManager(const UserManager&) = delete;
   UserManager& operator=(const UserManager&) = delete;
    // 提供数据库连接
    std::unique_ptr<BL::Database>& getDatabaseInstance();
   // 提供数据库连接
   std::unique_ptr<BL::Database>& getDatabaseInstance();
    // 用户操作
    bool login(const std::string& username, const std::string& password, bool rememberMe = false);
    void logout();
    bool isLoggedIn() const;
   // 用户操作
   bool login(const std::string& username, const std::string& password, bool rememberMe = false);
   void logout();
   bool isLoggedIn() const;
   bool isRememberMe() const;
    bool createUser(const std::string& username, const std::string& password, UserRole role,
        std::chrono::minutes timeout = std::chrono::minutes(30),
        std::chrono::hours expiration = std::chrono::hours(72));
    bool deleteUser(const std::string& username);
    std::vector<std::vector<std::string>> getUsers();
    bool setUsers(const std::vector<std::vector<std::string>>& usersData);
    bool changeUsername(const std::string& username, const std::string& newUsername);
    bool changePassword(const std::string& username, const std::string& newPassword);
    bool changeUserRole(const std::string& username, UserRole newRole);
    bool changeUserSessionTimeout(const std::string& username, int newTimeoutMinutes);
    bool changeUserSessionExpiration(const std::string& username, int newExpirationHours);
    std::vector<std::string> getUsernames();
    std::vector<std::string> getUserInfo(const std::string& username);
   bool createUser(const std::string& username, const std::string& password, UserRole role,
      std::chrono::minutes timeout = std::chrono::minutes(30),
      std::chrono::hours expiration = std::chrono::hours(72));
   bool deleteUser(const std::string& username);
   std::vector<std::vector<std::string>> getUsers();
   bool setUsers(const std::vector<std::vector<std::string>>& usersData);
   bool changeUsername(const std::string& username, const std::string& newUsername);
   bool changePassword(const std::string& username, const std::string& newPassword);
   bool changeUserRole(const std::string& username, UserRole newRole);
   bool changeUserSessionTimeout(const std::string& username, int newTimeoutMinutes);
   bool changeUserSessionExpiration(const std::string& username, int newExpirationHours);
   std::vector<std::string> getUsernames();
   std::vector<std::string> getUserInfo(const std::string& username);
    // 会话文件操作
    bool loadSession();     // 从会话文件加载会话信息
    void saveSession();     // 保存会话信息到文件
    void clearSession();    // 清除会话文件
   // 会话文件操作
   bool loadSession();     // 从会话文件加载会话信息
   void saveSession();     // 保存会话信息到文件
   void clearSession();    // 清除会话文件
    // 配置文件夹路径管理
    static std::string getConfigFolderPath();
    static std::string getSessionFilePath();
    static std::string getDatabaseFilePath();
   // 配置文件夹路径管理
   static std::string getConfigFolderPath();
   static std::string getSessionFilePath();
   static std::string getDatabaseFilePath();
    // 更新最后活动时间(用于无操作超时检测)
    void updateActivityTime();
   // 更新最后活动时间(用于无操作超时检测)
   void updateActivityTime();
    // 设置用户的无操作超时时间
    void setSessionTimeout(std::chrono::minutes timeout);
   // 设置用户的无操作超时时间
   void setSessionTimeout(std::chrono::minutes timeout);
    // 检查是否无操作超时
    bool isInactiveTimeout() const;
   // 检查是否无操作超时
   bool isInactiveTimeout() const;
    // 初始化无操作检测(设置全局钩子和定时器)
    void initializeIdleDetection(HWND hwnd);
   // 初始化无操作检测(设置全局钩子和定时器)
   void initializeIdleDetection(HWND hwnd);
    // 终止无操作检测(清除钩子和定时器)
    void terminateIdleDetection();
   // 终止无操作检测(清除钩子和定时器)
   void terminateIdleDetection();
   // 获取当前登录用户名
   // 获取当前登录用户名
   std::string getCurrentUser() const;
    // 修改当前登录用户名
    void setCurrentUser(const std::string& strName);
   // 修改当前登录用户名
   void setCurrentUser(const std::string& strName);
   // 获取当前登录用户密码
   // 获取当前登录用户密码
   std::string getCurrentPass() const;
    // 修改当前登录用户密码
    void setCurrentPass(const std::string& strPass);
   // 修改当前登录用户密码
   void setCurrentPass(const std::string& strPass);
   // 获取当前登录用户角色
   // 获取当前登录用户角色
   UserRole getCurrentUserRole() const;
    // 修改当前登录用户角色
    void setCurrentUserRole(UserRole emRole);
   // 修改当前登录用户角色
   void setCurrentUserRole(UserRole emRole);
   // 获取当前登录用户的无操作超时时间
   // 获取当前登录用户的无操作超时时间
   std::chrono::minutes getSessionTimeout() const;
   // 获取当前登录用户的会话过期时间
   // 获取当前登录用户的会话过期时间
   std::chrono::hours getSessionExpiration() const;
private:
    UserManager();
    ~UserManager();
   UserManager();
   ~UserManager();
    // 初始化数据库连接和用户表
    bool initializeDatabase();
   // 初始化数据库连接和用户表
   bool initializeDatabase();
    // 哈希密码,用于加密用户密码
    std::string hashPassword(const std::string& password);
   // 哈希密码,用于加密用户密码
   std::string hashPassword(const std::string& password);
    // 加密和解密函数
    std::string simpleEncryptDecrypt(const std::string& data, const std::string& key);
   // 加密和解密函数
   std::string simpleEncryptDecrypt(const std::string& data, const std::string& key);
    // 键盘和鼠标钩子函数
    static LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam);
    static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
   // 键盘和鼠标钩子函数
   static LRESULT CALLBACK LowLevelMouseProc(int nCode, WPARAM wParam, LPARAM lParam);
   static LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam);
    // 属性定义
    std::string m_strCurrentUser;                     // 当前登录用户名
    std::string m_strCurrentPass;                     // 当前登录密码
    UserRole m_enCurrentUserRole;                     // 当前登录用户角色
    bool m_isLoggedIn;                                // 是否已登录
    bool m_isRememberMe;                              // 是否记住登录状态
   // 属性定义
   std::string m_strCurrentUser;                     // 当前登录用户名
   std::string m_strCurrentPass;                     // 当前登录密码
   UserRole m_enCurrentUserRole;                     // 当前登录用户角色
   bool m_isLoggedIn;                                // 是否已登录
   bool m_isRememberMe;                              // 是否记住登录状态
    std::chrono::time_point<std::chrono::system_clock> m_tpLastLogin;     // 上次登录时间
    std::chrono::time_point<std::chrono::system_clock> m_tpLastActivity;  // 最后活动时间
    std::chrono::minutes m_tmSessionTimeout;          // 无操作超时时间
    std::chrono::hours m_tmSessionExpiration;         // 会话过期时间
    HHOOK m_hMouseHook;                               // 鼠标钩子句柄
    HHOOK m_hKeyboardHook;                            // 键盘钩子句柄
   std::chrono::time_point<std::chrono::system_clock> m_tpLastLogin;     // 上次登录时间
   std::chrono::time_point<std::chrono::system_clock> m_tpLastActivity;  // 最后活动时间
   std::chrono::minutes m_tmSessionTimeout;          // 无操作超时时间
   std::chrono::hours m_tmSessionExpiration;         // 会话过期时间
   HHOOK m_hMouseHook;                               // 鼠标钩子句柄
   HHOOK m_hKeyboardHook;                            // 键盘钩子句柄
    std::unique_ptr<BL::Database> m_pDB;              // 数据库接口
   std::unique_ptr<BL::Database> m_pDB;              // 数据库接口
};
#endif // USER_MANAGER_H