Mod aaa-12 添加修改用户-web、修改用户-命令行
RCA: SOL: 修改人:zhouzian 检视人:zhouzian
This commit is contained in:
parent
1b3bc5f8a7
commit
994f0848d3
|
@ -1,12 +1,14 @@
|
||||||
#ifndef USER_H_
|
#ifndef USER_H_
|
||||||
#define USER_H_
|
#define USER_H_
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
|
#include <stdbool.h>
|
||||||
#include "user_group.h"
|
#include "user_group.h"
|
||||||
|
|
||||||
#define UNAMESIZE (127 + 1)
|
#define UNAMESIZE (127 + 1)
|
||||||
#define UDESIZE (127 + 1)
|
#define UDESIZE (127 + 1)
|
||||||
#define UPWDSIZE (63 + 1)
|
#define UPWDSIZE (63 + 1)
|
||||||
#define UTIME 20
|
#define UTIME 20
|
||||||
|
#define USER_ATTRIBUTE_NUM 7
|
||||||
|
|
||||||
#define ADD_FAIL_NOGROUP 1
|
#define ADD_FAIL_NOGROUP 1
|
||||||
#define ADD_FAIL_NAMELEN 2
|
#define ADD_FAIL_NAMELEN 2
|
||||||
|
@ -18,15 +20,29 @@
|
||||||
typedef struct user
|
typedef struct user
|
||||||
{
|
{
|
||||||
unsigned short ID; //用户id
|
unsigned short ID; //用户id
|
||||||
|
unsigned short GID; //用户组ID
|
||||||
unsigned short multi_valid; //多人登陆、永久有效
|
unsigned short multi_valid; //多人登陆、永久有效
|
||||||
int GID; //用户组ID
|
|
||||||
char uname[UNAMESIZE]; //用户名
|
char uname[UNAMESIZE]; //用户名
|
||||||
char udescription[UDESIZE]; //用户描述
|
|
||||||
char passwd[UPWDSIZE]; //密码
|
char passwd[UPWDSIZE]; //密码
|
||||||
|
char udescription[UDESIZE]; //用户描述
|
||||||
time_t valid_begin_time; //有效期开始时间
|
time_t valid_begin_time; //有效期开始时间
|
||||||
time_t valid_end_time; //有效期结束时间
|
time_t valid_end_time; //有效期结束时间
|
||||||
}USERACCOUNT;
|
}USERACCOUNT;
|
||||||
|
|
||||||
|
typedef struct userlist
|
||||||
|
{
|
||||||
|
unsigned short ID;
|
||||||
|
unsigned short GID;
|
||||||
|
unsigned short multi;
|
||||||
|
unsigned short valid;
|
||||||
|
char uname[UNAMESIZE];
|
||||||
|
char gname[GNAMESIZE];
|
||||||
|
char passwd[UPWDSIZE];
|
||||||
|
char udescription[UDESIZE];
|
||||||
|
char valid_begin_time[UTIME];
|
||||||
|
char valid_end_time[UTIME];
|
||||||
|
}USERLIST;
|
||||||
|
|
||||||
typedef struct result_user_add
|
typedef struct result_user_add
|
||||||
{
|
{
|
||||||
int result;
|
int result;
|
||||||
|
@ -39,4 +55,16 @@ int init_user();
|
||||||
/*添加元素-新增用户*/
|
/*添加元素-新增用户*/
|
||||||
void usermanager_add_user(char* UNAME, char* UGNAME, USERADD* UADDRES);
|
void usermanager_add_user(char* UNAME, char* UGNAME, USERADD* UADDRES);
|
||||||
|
|
||||||
|
/* 按用户ID查询用户 */
|
||||||
|
void get_user_by_id(unsigned short ID, USERLIST* ULIST);
|
||||||
|
|
||||||
|
/* 修改用户-web */
|
||||||
|
bool mod_user_web(USERLIST* ULIST);
|
||||||
|
|
||||||
|
/* 根据用户名查询用户ID */
|
||||||
|
unsigned short get_userid_by_name(char* UNAME);
|
||||||
|
|
||||||
|
/* 修改用户-命令行 */
|
||||||
|
bool mod_user_line(char* UNAME, const int INTYPE, char* IN);
|
||||||
|
|
||||||
#endif
|
#endif
|
|
@ -21,4 +21,12 @@ do { \
|
||||||
time_int = mktime(&tm_time); \
|
time_int = mktime(&tm_time); \
|
||||||
} while (0)
|
} while (0)
|
||||||
|
|
||||||
|
#define MULTI_MASK 0x0002
|
||||||
|
#define VALID_MASK 0x0001
|
||||||
|
|
||||||
|
#define MULTI_GET(element) ((element) >> 1)
|
||||||
|
#define MULTI_SET(element, value) (((element) & VALID_MASK) | (((value) << 1) & MULTI_MASK))
|
||||||
|
#define VALID_GET(element) ((element) & VALID_MASK)
|
||||||
|
#define VALID_SET(element, value) (((element) & MULTI_MASK) | ((value) & VALID_MASK))
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -1,21 +1,16 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
#include "../../common/common_user.h"
|
#include "../../common/common_user.h"
|
||||||
#include "array_index.h"
|
#include "array_index.h"
|
||||||
#include "user_group.h"
|
#include "user_group.h"
|
||||||
#include "user.h"
|
#include "user.h"
|
||||||
|
#include "user_mod.h"
|
||||||
#define MULTI_MASK 0x0002
|
|
||||||
#define VALID_MASK 0x0001
|
|
||||||
|
|
||||||
#define MULTI_GET(element) ((element) >> 1)
|
|
||||||
#define MULTI_SET(element, value) (((element) & VALID_MASK) | (((value) << 1) & MULTI_MASK))
|
|
||||||
#define VALID_GET(element) ((element) & VALID_MASK)
|
|
||||||
#define VALID_SET(element, value) (((element) & MULTI_MASK) | ((value) & VALID_MASK))
|
|
||||||
|
|
||||||
extern ARRAY g_user_index_head;
|
extern ARRAY g_user_index_head;
|
||||||
extern USERGROUP g_group_table[GROUP_INDEX_MAX];
|
extern USERGROUP g_group_table[];
|
||||||
|
extern exce_mod_user g_user_modfunc_table[];
|
||||||
USERACCOUNT g_user_table[USER_INDEX_MAX];
|
USERACCOUNT g_user_table[USER_INDEX_MAX];
|
||||||
|
|
||||||
/*初始化参数*/
|
/*初始化参数*/
|
||||||
|
@ -99,4 +94,178 @@ void usermanager_add_user(char* uname, char* gname, USERADD* uaddres)
|
||||||
uaddres->userID = ID;
|
uaddres->userID = ID;
|
||||||
|
|
||||||
return;
|
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 NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
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;
|
||||||
}
|
}
|
|
@ -1,6 +1,7 @@
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
#include "array_index.h"
|
#include "array_index.h"
|
||||||
#include "user_group.h"
|
#include "user_group.h"
|
||||||
#include "../../common/common_user.h"
|
#include "../../common/common_user.h"
|
||||||
|
|
|
@ -0,0 +1,151 @@
|
||||||
|
#include <stdio.h>
|
||||||
|
#include "user_mod.h"
|
||||||
|
#include "user_group.h"
|
||||||
|
#include "user.h"
|
||||||
|
#include "array_index.h"
|
||||||
|
#include "common_user.h"
|
||||||
|
|
||||||
|
/* 修改用户函数数组 */
|
||||||
|
exce_mod_user g_user_modfunc_table[USER_ATTRIBUTE_NUM] = {mod_user_des,
|
||||||
|
mod_user_group,
|
||||||
|
mod_user_passwd,
|
||||||
|
mod_user_multi,
|
||||||
|
mod_user_valid,
|
||||||
|
mod_user_valid_begin_time,
|
||||||
|
mod_user_valid_end_time};
|
||||||
|
|
||||||
|
extern USERACCOUNT g_user_table[USER_INDEX_MAX];
|
||||||
|
|
||||||
|
bool mod_user_des(unsigned short uid, char* des)
|
||||||
|
{
|
||||||
|
if (UDESIZE < strlen(des))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
strcpy(g_user_table[uid].udescription, des);
|
||||||
|
|
||||||
|
/* 连接数据库,修改user表中的描述 */
|
||||||
|
/* UPDATE `user` u SET u.udescription = "" WHERE u.id = ; */
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mod_user_group(unsigned short uid, char* gname)
|
||||||
|
{
|
||||||
|
unsigned short gid = get_groupid_by_name(gname);
|
||||||
|
if (INVALID_INDEX == gid)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_user_table[uid].GID = gid;
|
||||||
|
|
||||||
|
/* 连接数据库,修改user表中的用户组id */
|
||||||
|
/* UPDATE `user` u SET u.group_id = WHERE u.id = ; */
|
||||||
|
|
||||||
|
/* 强制用户下线 */
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mod_user_passwd(unsigned short uid, char* passwd)
|
||||||
|
{
|
||||||
|
if (8 >= strlen(passwd) || 24 <= strlen(passwd))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
strcpy(g_user_table[uid].passwd, passwd);
|
||||||
|
|
||||||
|
/* 连接数据库,修改user表中的密码 */
|
||||||
|
/* UPDATE `user` u SET u.password = WHERE u.id = ; */
|
||||||
|
|
||||||
|
/* 强制用户下线 */
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mod_user_multi(unsigned short uid, char* multi)
|
||||||
|
{
|
||||||
|
unsigned short multi_old;
|
||||||
|
unsigned short multi_new = atoi(multi);
|
||||||
|
if (0 != multi_new && 1 != multi_new)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
multi_old = MULTI_GET(g_user_table[uid].multi_valid);
|
||||||
|
g_user_table[uid].multi_valid = MULTI_SET(g_user_table[uid].multi_valid, multi_new);
|
||||||
|
|
||||||
|
/* 连接数据库,修改user表中的multi_player */
|
||||||
|
/* UPDATE `user` u SET u.multi_player = WHERE u.id = ; */
|
||||||
|
|
||||||
|
if (0 == multi_old && 1 == multi_new)
|
||||||
|
{
|
||||||
|
/* 强制用户下线 */
|
||||||
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
void mod_user_valid_offline(unsigned short uid)
|
||||||
|
{
|
||||||
|
time_t cur_time;
|
||||||
|
|
||||||
|
if (1 == VALID_GET(g_user_table[uid].multi_valid))
|
||||||
|
{
|
||||||
|
cur_time = time(NULL);
|
||||||
|
if (cur_time < g_user_table[uid].valid_begin_time || cur_time > g_user_table[uid].valid_end_time)
|
||||||
|
{
|
||||||
|
/* 强制用户下线 */
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mod_user_valid(unsigned short uid, char* valid)
|
||||||
|
{
|
||||||
|
unsigned short valid_new = atoi(valid);
|
||||||
|
//校验数据
|
||||||
|
if (0 != valid_new && 1 != valid_new)
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
g_user_table[uid].multi_valid = VALID_SET(g_user_table[uid].multi_valid, valid_new);
|
||||||
|
|
||||||
|
/* 连接数据库,修改user表中的valid_always */
|
||||||
|
/* UPDATE `user` u SET u.valid_always = WHERE u.id = ; */
|
||||||
|
|
||||||
|
mod_user_valid_offline(uid);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mod_user_valid_begin_time(unsigned short uid, char* valid_start_time)
|
||||||
|
{
|
||||||
|
time_t temp_time;
|
||||||
|
|
||||||
|
/* 校验vaild是否符合"%Y-%m-%d %H:%M:%S"格式,不符合直接return */
|
||||||
|
|
||||||
|
STRING2TIME_T(valid_start_time, temp_time);
|
||||||
|
g_user_table[uid].valid_begin_time = temp_time;
|
||||||
|
|
||||||
|
/* 连接数据库,修改user表中的valid_begin_time */
|
||||||
|
/* UPDATE `user` u SET u.valid_begin_time = WHERE u.id = ; */
|
||||||
|
|
||||||
|
mod_user_valid_offline(uid);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool mod_user_valid_end_time(unsigned short uid, char* valid_end_time)
|
||||||
|
{
|
||||||
|
time_t temp_time;
|
||||||
|
/* 校验vaild是否符合"%Y-%m-%d %H:%M:%S"格式,不符合直接return */
|
||||||
|
|
||||||
|
STRING2TIME_T(valid_end_time, temp_time);
|
||||||
|
g_user_table[uid].valid_end_time = temp_time;
|
||||||
|
|
||||||
|
/* 连接数据库,修改user表中的valid_end_time */
|
||||||
|
/* UPDATE `user` u SET u.valid_end_time = WHERE u.id = ; */
|
||||||
|
|
||||||
|
mod_user_valid_offline(uid);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef USER_MOD_H_
|
||||||
|
#define USER_MOD_H_
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
/* 修改用户属性的函数指针 */
|
||||||
|
typedef bool (*exce_mod_user)(unsigned short, char*);
|
||||||
|
/* 修改用户描述 */
|
||||||
|
bool mod_user_des(unsigned short uid, char *in);
|
||||||
|
/* 修改用户组 */
|
||||||
|
bool mod_user_group(unsigned short uid, char* in);
|
||||||
|
/* 修改用户密码 */
|
||||||
|
bool mod_user_passwd(unsigned short uid, char* in);
|
||||||
|
/* 修改多用户登陆 */
|
||||||
|
bool mod_user_multi(unsigned short uid, char* in);
|
||||||
|
/* 修改用户永久有效 */
|
||||||
|
bool mod_user_valid(unsigned short uid, char* in);
|
||||||
|
/* 修改有效期开始时间 */
|
||||||
|
bool mod_user_valid_begin_time(unsigned short uid, char* valid);
|
||||||
|
/* 修改有效期结束时间 */
|
||||||
|
bool mod_user_valid_end_time(unsigned short uid, char* valid);
|
||||||
|
|
||||||
|
|
||||||
|
#endif
|
Loading…
Reference in New Issue