Mod aaa-12 添加修改用户-web、修改用户-命令行

RCA:
SOL:
修改人:zhouzian
检视人:zhouzian
This commit is contained in:
zhouzian 2019-07-03 20:47:29 +08:00
parent 1b3bc5f8a7
commit 994f0848d3
6 changed files with 391 additions and 11 deletions

View File

@ -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

View File

@ -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

View File

@ -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;
} }

View File

@ -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"

View File

@ -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;
}

View File

@ -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