#include #include #include #include #include "common_user.h" #include "array_index.h" #include "user_mod.h" #include "sg/user/user_manager/user_group.h" #include "sg/user/user_manager/user.h" extern ARRAY g_user_index_head; extern USERGROUP g_group_table[]; extern exce_mod_user g_user_modfunc_table[]; USERACCOUNT g_user_table[USER_INDEX_MAX]; /*初始化参数*/ int init_user() { /* 初始化用户的index */ int init_result = init_array(&g_user_index_head, USER_INDEX_MAX); if (INIT_FAIL == init_result) { return INIT_FAIL; } memset(g_user_table, 0, sizeof(g_user_table)); return INIT_SUCCESS; } /*添加元素-新增用户*/ void usermanager_add_user(char* uname, char* gname, USERADD* uaddres) { if (NULL == uaddres) { return; } uaddres->userID = INVALID_INDEX; /* 校验用户名长度 */ if (NULL == uname || (UNAMESIZE) < strlen(uname) || 0 >= strlen(uname)) { uaddres->result = ADD_FAIL_NAMELEN; return; } /* 校验用户名中不含特殊字符 */ if (SPECHAR(uname)) { uaddres->result = ADD_FAIL_NAMESPE; return; } /* 根据用户组名查询用户组ID */ if(NULL == gname) { uaddres->result = ADD_FAIL_NOGROUP; return; } unsigned short GID_temp = get_groupid_by_name(gname); if(INVALID_INDEX == GID_temp) { uaddres->result = ADD_FAIL_NOGROUP; return; } /* 校验重名 */ for (int i = 0; i < USER_INDEX_MAX; i++) { if (0 == strcmp(uname, g_user_table[i].uname)) { uaddres->result = ADD_FAIL_NAMEDUP; return; } } /* 生成用户ID,判断用户是否满 */ unsigned short ID = alloc_index(&g_user_index_head); if (INVALID_INDEX == ID) { uaddres->result = ADD_FAIL_USERFULL; return; } /* 存内存 */ g_user_table[ID].ID = ID; g_user_table[ID].GID = GID_temp; strcpy(g_user_table[ID].uname, uname); strcpy(g_user_table[ID].passwd, "123456"); /* 连接数据库,存user表 */ /* INSERT INTO `user` SET id = , group_id = , user_name = "", password = "", multi_player = , valid_always = */ uaddres->result = ADD_SUCCESS; uaddres->userID = ID; return; } /* 按用户ID查询用户 */ void get_user_by_id(unsigned short ID, USERLIST* ulist) { unsigned short temp_multi, temp_valid; char temp_begin_time[UTIME] = { 0 }; char temp_end_time[UTIME] = { 0 }; if (NULL == ulist || INVALID_INDEX >= ID || (USER_INDEX_MAX - 1) <= ID) { return; } memset(ulist, 0, sizeof(ulist)); /* 内存查询用户 */ temp_multi = MULTI_GET(g_user_table[ID].multi_valid); temp_valid = VALID_GET(g_user_table[ID].multi_valid); ulist->ID = ID; ulist->GID = g_user_table[ID].GID; ulist->multi = temp_multi; ulist->valid = temp_valid; strcpy(ulist->uname, g_user_table[ID].uname); strcpy(ulist->gname, g_group_table[ulist->GID].gname); strcpy(ulist->udescription, g_user_table[ID].udescription); strcpy(ulist->passwd, g_user_table[ID].passwd); if (1 == temp_valid) { TIME_T2STRING(g_user_table[ID].valid_begin_time, temp_begin_time); TIME_T2STRING(g_user_table[ID].valid_end_time, temp_end_time); } strcpy(ulist->valid_begin_time, temp_begin_time); strcpy(ulist->valid_end_time, temp_end_time); /* 查数据库,这里查数据库没上面快 */ /* SELECT id, group_id, multi_player, valid_always, user_name, udescription,valid_begin_time,valid_end_time FROM `user`WHERE id = */ return; } /* 修改用户-web */ bool mod_user_web(USERLIST* ulist) { USERLIST* temp_user; time_t cur_time; /* 可以修改的数据:用户组ID、描述、密码、公用账号、永久有效、有效期开始时间、有效期结束时间 */ if (NULL == ulist || INVALID_INDEX == ulist->ID || INVALID_INDEX == ulist->GID) { return false; } /* 校验描述长度 */ if (NULL != ulist->udescription) { if (UDESIZE < strlen(ulist->udescription)) { return false; } } /* 校验密码长度 */ if (NULL != ulist->passwd) { if (8 >= strlen(ulist->passwd) || 24 <= strlen(ulist->passwd)) { return false; } } temp_user = (USERLIST*)malloc(sizeof(USERLIST)); if (NULL == temp_user) { return false; } get_user_by_id(ulist->ID, temp_user); /* 更新内存数据 */ strcpy(g_user_table[ulist->ID].udescription, ulist->udescription); strcpy(g_user_table[ulist->ID].passwd, ulist->passwd); g_user_table[ulist->ID].GID = ulist->GID; g_user_table[ulist->ID].multi_valid = MULTI_SET(g_user_table[ulist->ID].multi_valid, ulist->multi); g_user_table[ulist->ID].multi_valid = VALID_SET(g_user_table[ulist->ID].multi_valid, ulist->valid); /* 更新有效日期时间 */ if (1 == ulist->valid) { //if(判断是否符合格式) STRING2TIME_T(ulist->valid_begin_time, g_user_table[ulist->ID].valid_begin_time); STRING2TIME_T(ulist->valid_end_time, g_user_table[ulist->ID].valid_end_time); return true; } /* 连接数据库,更显user表 */ /* UPDATE `user` u SET u.group_id = ,u.udescription = "", u.`password` = "", u.multi_player = , u.valid_always = , u.valid_begin_time = "", u.valid_end_time = "" WHERE u.id = ; */ /* 调用接口,查询该用户是否有在线IP */ /* 如果没有,直接return */ /* 密码发生改变,下线用户 */ if (0 != strcmp(ulist->passwd, temp_user->passwd)) { /* 下线用户,return */ } /* 公用账号改为单用户登陆,下线用户 */ if (1 == ulist->multi && 0 == temp_user->multi) { /* 下线用户,return */ } /* 当前时间不在有效期内,下线用户 */ if (1 == VALID_GET(g_user_table[ulist->ID].multi_valid)) { cur_time = time(NULL); if (cur_time < g_user_table[ulist->ID].valid_begin_time || cur_time > g_user_table[ulist->ID].valid_end_time) { /* 下线用户,return */ } } return true; } unsigned short get_userid_by_name(char* uname) { /* 内存查询数据 */ unsigned short UID_temp = INVALID_INDEX; if (NULL == uname) { return UID_temp; } for (int i = 0; i < USER_INDEX_MAX && UID_temp == INVALID_INDEX; i++) { UID_temp = GETID(g_user_table[i].ID, uname, g_user_table[i].uname); } /* 连接数据库,根据用户组名查询user表中的id */ /* SELECT id FROM user WHERE user_name = "" */ return UID_temp; } /* 修改用户-命令行 */ bool mod_user_line(char* uname, const int intype, char* in) { unsigned short uid; bool result = true; if (NULL == uname || NULL == in) { return false; } /* 检查修改类型 */ if (intype < 0 || intype >= USER_ATTRIBUTE_NUM) { return false; } /* 根据用户名查询用户ID */ uid = get_userid_by_name(uname); if (INVALID_INDEX == uid) { return false; } /*(0)描述、(1)所属组名、(2)登陆密码、(3)公用账号、(4)永久有效、(5)有效期开始时间、(6)有效期结束时间 */ result = g_user_modfunc_table[intype](uid, in); return result; }