From 829fe6c6bc33d53fda9c31fd45a37e1df87befff Mon Sep 17 00:00:00 2001
From: mrDarker <mr.darker@163.com>
Date: 星期五, 30 一月 2026 11:16:24 +0800
Subject: [PATCH] Merge branch 'clh' into liuyang

---
 SourceCode/Bond/USERXLibrary/UserXAPI.h |  136 +++++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 136 insertions(+), 0 deletions(-)

diff --git a/SourceCode/Bond/USERXLibrary/UserXAPI.h b/SourceCode/Bond/USERXLibrary/UserXAPI.h
new file mode 100644
index 0000000..94e141a
--- /dev/null
+++ b/SourceCode/Bond/USERXLibrary/UserXAPI.h
@@ -0,0 +1,136 @@
+// UserX 用户管理库(C 接口)/ UserX user management library (C API)
+// 覆盖功能 / Features: users, roles, actions, auth, logs(固定 SQLite3 持久化 / SQLite3 persistence)
+
+#pragma once
+
+#if defined(_WIN32)
+#  ifdef USERXLIBRARY_EXPORTS
+#    define UX_API extern "C" __declspec(dllexport)
+#  else
+#    define UX_API extern "C" __declspec(dllimport)
+#  endif
+#else
+#  define UX_API extern "C"
+#endif
+
+#include <wchar.h>
+
+
+#ifdef _COMPILE_AS_LIB
+#warning "compiling as lib!"
+#else
+#ifdef _DEBUG
+#ifndef _WIN64
+#pragma comment(lib, "../USERXLibrary/lib/Win32/Debug/UserXLibrary.lib")
+#else 
+#pragma comment(lib, "../USERXLibrary/lib/x64/Debug/UserXLibrary.lib")
+#endif
+#else 
+#ifndef _WIN64
+#pragma comment(lib, "../USERXLibrary/lib/Win32/Release/UserXLibrary.lib")
+#else 
+#pragma comment(lib, "../USERXLibrary/lib/x64/Release/UserXLibrary.lib")
+#endif
+#endif
+#endif // !BUILD_AS_LIB
+
+
+// 额外错误码 / Extra error code
+#ifndef UX_ERR_BAD_PASSWORD
+#define UX_ERR_BAD_PASSWORD        -10    // 密码错误 / bad password
+#endif
+
+// 错误码宏定义 / Error code macros
+#define UX_OK                        0    // 成功 / success
+#define UX_ERR_INVALID_ARGS         -1    // 参数错误 / invalid arguments
+#define UX_ERR_NOT_FOUND            -2    // 未找到 / not found
+#define UX_ERR_EXISTS               -3    // 已存在 / already exists
+#define UX_ERR_PERMISSION           -4    // 权限不足 / permission denied
+#define UX_ERR_NOT_LOGGED_IN        -5    // 未登录 / not logged in
+#define UX_ERR_BUFFER_TOO_SMALL     -6    // 缓冲区不足 / buffer too small
+#define UX_ERR_DB                   -7    // I/O 或数据库错误 / I/O or database error
+#define UX_ERR_NOT_DEFINED          -8    // 未定义(如动作不存在)/ not defined
+#define UX_ERR_DB_NOT_EMPTY         -9    // 数据库非空(已初始化)/ database not empty
+
+// 返回码 / Return codes(详见上方宏)
+// UX_OK, UX_ERR_INVALID_ARGS, UX_ERR_NOT_FOUND, UX_ERR_EXISTS,
+// UX_ERR_PERMISSION, UX_ERR_NOT_LOGGED_IN, UX_ERR_BUFFER_TOO_SMALL,
+// UX_ERR_DB, UX_ERR_NOT_DEFINED, UX_ERR_DB_NOT_EMPTY
+
+// 初始化:指定数据目录,内部将打开/创建 SQLite 数据库文件 UserX.db
+// Init: provide data directory; opens/creates SQLite DB file UserX.db
+UX_API int UX_Init(const wchar_t* storage_dir);
+
+// 可选:覆盖数据库路径(仅使用第一个参数作为 .db 文件路径,其他忽略)
+// Optional: override DB path (use first arg as .db path; others ignored)
+UX_API int UX_SetStorage(const wchar_t* users_db_path,
+                         const wchar_t* /*unused_logs*/,
+                         const wchar_t* /*unused_roles*/,
+                         const wchar_t* /*unused_actions*/);
+
+// 配置角色(name:level 按行)/ Configure roles from lines "name:level"
+// 仅允许在“空数据库”(roles/users/actions/logs 四表均无数据)时调用;否则返回 -9。
+// Only allowed when DB is empty (roles/users/actions/logs all zero rows); otherwise returns -9.
+// e.g. L"Admin:100\nEngineer:50\nOperator:10\n"
+UX_API int UX_SetRoleDefinitions(const wchar_t* roles_text);
+
+// 获取角色列表(name:level 按行);buffer 为空或不足时返回所需大小
+// Get roles list as lines; returns required size if buffer is null/too small
+UX_API int UX_GetRoles(wchar_t* buffer, int buffer_chars);
+
+// 用户管理 / User management
+UX_API int UX_AddUser(const wchar_t* username,
+                      const wchar_t* display_name,
+                      const wchar_t* password,
+                      const wchar_t* role_name);
+
+UX_API int UX_DeleteUser(const wchar_t* username);
+
+// 更新任意字段(传 nullptr 表示保持不变)/ Update subset; nullptr keeps field
+UX_API int UX_UpdateUser(const wchar_t* username,
+                         const wchar_t* new_display_name,
+                         const wchar_t* new_password,
+                         const wchar_t* new_role_name,
+                         int enabled /* -1 keep, 0 disable, 1 enable */);
+
+UX_API int UX_EnableUser(const wchar_t* username, int enabled /*0/1*/);
+UX_API int UX_ResetPassword(const wchar_t* username, const wchar_t* new_password);
+UX_API int UX_RenameUser(const wchar_t* username, const wchar_t* new_display_name);
+
+// 管理员权限:删除所有用户 / Admin-only
+UX_API int UX_DeleteAllUsers();
+
+// 获取用户列表(每行:username,display,level,enabled)/ Query users
+UX_API int UX_GetUsers(wchar_t* buffer, int buffer_chars);
+
+// 认证 / Authentication
+UX_API int UX_Login(const wchar_t* username, const wchar_t* password);
+UX_API void UX_Logout();
+UX_API int UX_IsLoggedIn();
+UX_API void UX_Shutdown(); // 释放资源 / shutdown and free resources
+UX_API int UX_GetCurrentUser(wchar_t* buffer, int buffer_chars);
+
+// 动作与权限 / Actions & permissions
+// 定义/覆盖动作(名称、描述、最低角色)/ Define/overwrite action
+UX_API int UX_DefineAction(const wchar_t* action_name,
+                           const wchar_t* description,
+                           const wchar_t* min_role_name);
+
+// 可执行返回1,不可执行返回0;负数为错误 / 1 allowed, 0 denied
+UX_API int UX_CanExecute(const wchar_t* action_name);
+
+// 记录动作到日志(时间、用户、动作、描述)/ Record action to logs
+UX_API int UX_RecordAction(const wchar_t* action_name);
+
+// 获取动作列表(每行:name,desc,minlevel)/ Get actions list
+UX_API int UX_GetActions(wchar_t* buffer, int buffer_chars);
+
+// 记录尝试(允许/拒绝)/ record an attempt with allowed flag (1 allowed, 0 denied)
+UX_API int UX_RecordAttempt(const wchar_t* action_name, int allowed /*1/0*/);
+
+// 查询最近 N 条日志(每行:ISO8601时间,用户名,动作,描述)/ Query logs
+UX_API int UX_QueryLogs(int last_n, wchar_t* buffer, int buffer_chars);
+
+// 根据错误码返回文字描述(中文/English)
+// Return a human-readable message for an error code
+UX_API const wchar_t* UX_ErrorMessage(int code);

--
Gitblit v1.9.3