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