You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

234 lines
8.0 KiB
C

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

/*********************************************************************
*文件说明: 用户管理模块
*作者: logos
*日期: 2014/01/22
*修改日志: 2014/01/22 logos create
***********************************************************************/
#pragma once
#ifndef DLL_INCLUDE_LOGIN_H
#define DLL_INCLUDE_LOGIN_H
#ifndef WINAPI
#define WINAPI __stdcall
#endif
#ifndef EXPORT_C
#define EXPORT_C extern "C"
#endif
#ifndef MAX_NAME_LEN
#define MAX_NAME_LEN 32
#endif
#ifndef MAX_PWD_LEN
#define MAX_PWD_LEN 16
#endif
#define MAX_LIMIT_CNT 32 //权限项最大值
enum EMUserGroup
{//用户等级
EUser_Level0 = 0, //未登录
EUser_Level1, //OP
EUser_Level2, //admin
EUser_Level3, //system
EUser_Level4, //root
};
struct TUser
{//用户信息
char name[MAX_NAME_LEN]; //用户名
unsigned int group; //组别
unsigned int limit; //权限 -- 位
};
struct TUserLimit
{//用户权限
char name[MAX_NAME_LEN]; //名称
char desc[MAX_NAME_LEN]; //标题
};
enum EM_ERR_USER
{//错误代码
ERR_NO_LOGIN = -1100, //未登录
ERR_NO_LIMIT, //无权限
ERR_USER_EXIST, //用户已存在
ERR_USER_TOO_LONG, //用户名过长
ERR_PWD_TOO_LONG, //密码过长
ERR_INVALID_USER, //用户名无效
ERR_INVALID_PWD, //密码无效
ERR_INVALID_LIMIT, //无效的权限项
ERR_REPEAT_LIMIT, //重复的权限项
ERR_LIMIT_OVER, //权限设置超限
};
/****************************************************
*Function: 初始化模块
*Intput: NULL
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI user_init();
/****************************************************
*Function: 释放模块 资源
*Intput: NULL
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI user_deinit();
/****************************************************
*Function: 用户登陆,成功后调用get_cur_limit获取权限
*Intput: lpUser 用户名
lpPwd 密码
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI login(const char* lpUser, const char* lpPwd);
/****************************************************
*Function: 用户退出登陆
*Intput: NULL
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI logout();
/****************************************************
*Function: 修改用户信息, 权限足够才能调用
*Intput: lpOldUser 要修改的用户名
lpNewUser 新的用户名 默认值不修改
group 新的组别 admin/system 默认值不修改
limit 新的权限 默认值不修改
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI change_user(const char* lpOldUser, const char* lpNewUser = 0, unsigned int group = 0, unsigned int limit = 0);
/****************************************************
*Function: 修改用户密码
*Intput: lpUser 用户名
lpOldPwd 旧密码
lpNewPwd 新密码
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI change_pwd(const char* lpUser, const char* lpOldPwd, const char* lpNewPwd);
/****************************************************
*Function: 清空密码, 权限足够才能调用
*Intput: lpUser 用户名
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI clear_pwd(const char* lpUser);
/****************************************************
*Function: 增加一个用户
*Intput: lpUser 用户名
lpPwd 密码
group 组别 admin/system
limit 权限
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI add_user(const char* lpUser, const char* lpPwd, unsigned int group, unsigned int limit);
/****************************************************
*Function: 删除一个用户
*Intput: lpUser 用户名
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI del_user(const char* lpUser);
/****************************************************
*Function: 获取用户列表
*Intput: pstUser 用户缓冲区可以传NULL获取数量
*Output: pstUser 用户缓冲区
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI get_user_list(TUser* pstUser = 0);
/****************************************************
*Function: 获取当前用户名
*Intput: NULL
*Output: NULL
*Return: 返回当前用户名,失败返回NULL
******************************************************/
EXPORT_C const char* WINAPI get_cur_user();
/****************************************************
*Function: 获取当前用户名
*Intput: NULL
*Output: pname 从这里返回名称
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI get_cur_users(char* pname);
/****************************************************
*Function: 获取用户组别
*Intput: pszuser 用户名 传入空标识当前用户
*Output: NULL
*Return: 返回当前用户的组别
******************************************************/
EXPORT_C unsigned int WINAPI get_user_group(const char* pszuser = 0);
/****************************************************
*Function: 获取用户权限
*Intput: pszuser 用户名 传入空标识当前用户
*Output: NULL
*Return: 返回当前用户的权限
******************************************************/
EXPORT_C unsigned int WINAPI get_user_limit(const char* pszuser = 0);
/****************************************************
*Function: 判断当前用户是否有某项权限
*Intput: pszname 权限项名称
pszuser 用户名 传入空标识当前用户
*Output: NULL
*Return: 返回1标识有0标识没有
******************************************************/
EXPORT_C int WINAPI chk_user_limit(const char* pszname, const char* pszuser = 0);
/****************************************************
*Function: 增加一项权限,最多支持32项权限
*Intput: index 索引,区间[0,32)
pszname 名称,不能重复
pszdesc 描述标题,显示在界面上的,若为空则显示名称
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
*PS: 在需要检测权限的代码中使用chk_user_limit函数,
可根据权限名判断当前用户是否有该项权限
******************************************************/
EXPORT_C int WINAPI add_limit(const char* pszname, const char* pszdesc = 0);
/****************************************************
*Function: 删除其中一项权限
*Intput: index 自定义权限索引
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
*PS: 必须保留最少一个权限项
******************************************************/
EXPORT_C int WINAPI del_limit(int index);
/****************************************************
*Function: 获取权限项列表
*Intput: pstlimit 权限项数组可以传NULL
*Output: pstlimit 权限项数组
*Return: 成功权限项数量, 失败返回错误码<0
*PS: 先传NULL获取数组大小new申请内存传入指针获取列表
******************************************************/
EXPORT_C int WINAPI get_limit_list(TUserLimit* pstlimit = 0);
/****************************************************
*Function: 获取权限项描述-也可判断某权限项是否存在
*Intput: pszname 权限名称
pszdesc 权限描述可以传NULL
*Output: NULL
*Return: 成功返回0, 失败返回错误码<0
******************************************************/
EXPORT_C int WINAPI get_limit_info(const char* pszname, char* pszdesc = 0);
#endif //防止重复包含