Add aaa-12 新增删除用户、删除用户组、移动分组

RCA:
SOL:
修改人:zhouzian
检视人:zhouzian
This commit is contained in:
zhouzian 2019-07-12 14:43:42 +08:00
parent 97a9c13cd3
commit 45bf923278
9 changed files with 459 additions and 52 deletions

View File

@ -99,6 +99,103 @@ static ret_code user_config_add_proc(uint source, uint config_type,
return ret;
}
/*
* -
* iuput格式
* {
* "type": 1,
* "data": ["用户01", "用户02", "用户03"]
* }
*
* output格式
* [{
* "用户01": 0
* },
* {
* "用户02": 1
* },
* {
* "用户03": 2
* }
*]
* 01/212
*/
static ret_code user_config_del_proc(uint source, uint config_type,
pointer input, int input_len,
pointer output, int *output_len)
{
ret_code ret = RET_OK;
int array_size;
cJSON *root, *data, *username_json, *ret_json, *ret_body_json;
USER_DEL *username;
char *ret_char = NULL;
/* 解析json串 */
root = cJSON_Parse(input);
data = cJSON_GetObjectItem(root, "data");
if(!data)
{
ret = RET_INPUTERR;
//ASSERT_RET(ret);
cJSON_Delete(root);
return ret;
}
array_size = cJSON_GetArraySize(data);
username = (USER_DEL *)malloc(sizeof(USER_DEL));
if(NULL == username)
{
ret = RET_INPUTERR;
//ASSERT_RET(ret);
cJSON_Delete(root);
return ret;
}
ret_json = cJSON_CreateArray();
if(!ret_json)
{
ret = RET_ERR;
//ASSERT_RET(ret);
return ret;
}
for(int i = 0; i < array_size; i++)
{
int ret_del_user;
char *ret_username = NULL;
username_json = cJSON_GetArrayItem(data, i);
//if(!username_json)
ret_username = username_json->valuestring;
username->type = DELUSER_BY_USERNAME;
strcpy(username->id_name.uname, ret_username);
ret_del_user = usermanager_del_user(username); //执行操作-删除用户
ret_body_json = cJSON_CreateObject();
// if(!ret_result_json)
// {
// ret = RET_ERR;
// return ret;
// }
cJSON_AddNumberToObject(ret_body_json, ret_username, ret_del_user);
cJSON_AddItemToArray(ret_json, ret_body_json);
}
/* 处理返回结果 */
ret_char = cJSON_PrintUnformatted(ret_json);
memcpy(output, ret_char, strlen(ret_char)+1);
/* 释放内存 */
cJSON_Delete(root);
cJSON_Delete(ret_json);
UCHAR_FREE(ret_char);
UCHAR_FREE(username);
return ret;
}
/*
* -web-
* iuput格式
@ -264,6 +361,81 @@ static ret_code user_config_mod_line_proc(uint source, uint config_type,
return ret;
}
/*
* -
* iuput格式
* {
* "type": 6,
* "data": {
* "user_id": 1,
* "group_id": 3
* }
* }
*
* output格式{"result":true}
* true
* false
*/
static ret_code user_config_move_group_proc(uint source, uint config_type,
pointer input, int input_len,
pointer output, int *output_len)
{
ret_code ret = RET_OK;
bool ret_move_group;
cJSON *root, *data, *userid_json, *groupid_json, *ret_json;
char *ret_char = NULL;
/* 解析json串 */
root = cJSON_Parse(input);
data = cJSON_GetObjectItem(root, "data");
if(!data)
{
ret = RET_INPUTERR;
//ASSERT_RET(ret);
cJSON_Delete(root);
return ret;
}
userid_json = cJSON_GetObjectItem(data, "user_id");
if(!userid_json)
{
ret = RET_INPUTERR;
//ASSERT_RET(ret);
cJSON_Delete(root);
return ret;
}
groupid_json = cJSON_GetObjectItem(data, "group_id");
if(!groupid_json)
{
ret = RET_INPUTERR;
//ASSERT_RET(ret);
cJSON_Delete(root);
return ret;
}
/* 执行操作 */
ret_move_group = move_user_group(userid_json->valueint, groupid_json->valueint);
/* 处理返回结果 */
ret_json = cJSON_CreateObject();
if(!ret_json)
{
ret = RET_ERR;
//ASSERT_RET(ret);
return ret;
}
cJSON_AddBoolToObject(ret_json, "result", ret_move_group);
ret_char = cJSON_PrintUnformatted(ret_json);
memcpy(output, ret_char, strlen(ret_char)+1);
/* 释放内存 */
cJSON_Delete(root);
cJSON_Delete(ret_json);
UCHAR_FREE(ret_char);
return ret;
}
/*
* config_type只设置为3CM_CONFIG_SETinput的json中
* iuput格式{"type": 0,"data": {xxx}}
@ -300,6 +472,11 @@ ret_code user_config_proc(uint source, uint config_type,
input, input_len,
output, output_len);
break;
case USER_CONFIG_DEL:
ret = user_config_del_proc(source, config_type,
input, input_len,
output, output_len);
break;
case USER_CONFIG_MOD_WEB:
ret = user_config_mod_web_proc(source, config_type,
input, input_len,
@ -310,6 +487,11 @@ ret_code user_config_proc(uint source, uint config_type,
input, input_len,
output, output_len);
break;
case USER_CONFIG_MOD_GROUP:
ret = user_config_move_group_proc(source, config_type,
input, input_len,
output, output_len);
break;
default:
ret = RET_NOTSUPPORT;
}

View File

@ -24,8 +24,8 @@ ret_code usergroup_config_chk(uint source, uint *config_type,
* 1/2/3/41234
*/
static ret_code usergroup_config_add_proc(uint source, uint config_type,
pointer input, int input_len,
pointer output, int *output_len)
pointer input, int input_len,
pointer output, int *output_len)
{
ret_code ret = RET_OK;
unsigned short result;
@ -80,6 +80,86 @@ static ret_code usergroup_config_add_proc(uint source, uint config_type,
return ret;
}
/*
* -
* iuput格式
* {
* "type": 1,
* "data": ["用户组01", "用户组02", "用户组03"]
* }
*
* output格式
* [{
* "用户组01": 0
* },
* {
* "用户组02": 1
* },
* {
* "用户组03": 2
* }
*]
* 01/212
*/
static ret_code usergroup_config_del_proc(uint source, uint config_type,
pointer input, int input_len,
pointer output, int *output_len)
{
ret_code ret = RET_OK;
int array_size;
cJSON *root, *data, *ret_json, *ret_body_json;
char *ret_char = NULL;
/* 解析json串 */
root = cJSON_Parse(input);
data = cJSON_GetObjectItem(root, "data");
if(!data)
{
ret = RET_INPUTERR;
//ASSERT_RET(ret);
cJSON_Delete(root);
return ret;
}
array_size = cJSON_GetArraySize(data);
ret_json = cJSON_CreateArray();
if(!ret_json)
{
ret = RET_ERR;
//ASSERT_RET(ret);
return ret;
}
for(int i = 0; i < array_size; i++)
{
int ret_del_group;
char *ret_groupname = NULL;
ret_groupname = cJSON_GetArrayItem(data, i)->valuestring;
ret_del_group = del_group_by_name(ret_groupname); //执行操作-删除用户组
ret_body_json = cJSON_CreateObject();
// if(!ret_result_json)
// {
// ret = RET_ERR;
// return ret;
// }
cJSON_AddNumberToObject(ret_body_json, ret_groupname, ret_del_group);
cJSON_AddItemToArray(ret_json, ret_body_json);
}
/* 处理返回结果 */
ret_char = cJSON_PrintUnformatted(ret_json);
memcpy(output, ret_char, strlen(ret_char)+1);
/* 释放内存 */
cJSON_Delete(root);
cJSON_Delete(ret_json);
UCHAR_FREE(ret_char);
return ret;
}
/*用户组配置处理
*input格式{"type": 0,"data": {xxx}}
*output格式{"result": 0}
@ -116,6 +196,11 @@ ret_code usergroup_config_proc(uint source, uint config_type,
input, input_len,
output, output_len);
break;
case USERGROUP_CONFIG_DEL:
ret = usergroup_config_del_proc(source, config_type,
input, input_len,
output, output_len);
break;
default:
ret = RET_NOTSUPPORT;
}

View File

@ -38,10 +38,8 @@ do { \
def_type = cJSON_GetObjectItem(def_root, "type"); \
if(def_type) { \
fun_type = def_type->valueint; \
cJSON_Delete(def_root); \
}else{ \
cJSON_Delete(def_root); \
} \
} \
cJSON_Delete(def_root); \
} \
} while (0)

View File

@ -10,12 +10,19 @@
#define UTIME 20
#define USER_ATTRIBUTE_NUM 7
#define ADD_FAIL_NOGROUP 1
#define ADD_FAIL_NAMELEN 2
#define ADD_FAIL_NAMESPE 3
#define ADD_FAIL_NAMEDUP 4
#define ADD_FAIL_USERFULL 5
#define ADD_SUCCESS 0
#define ADDUSER_FAIL_NOGROUP 1
#define ADDUSER_FAIL_NAMELEN 2
#define ADDUSER_FAIL_NAMESPE 3
#define ADDUSER_FAIL_NAMEDUP 4
#define ADDUSER_FAIL_USERFULL 5
#define ADDUSER_SUCCESS 0
#define DELUSER_SUCCESS 0
#define DELUSER_FAIL_NOTEXIST 1
#define DELUSER_FAIL_STRTEGY 2
#define DELUSER_BY_USERNAME 1
#define DELUSER_BY_USERID 2
typedef struct user
{
@ -49,6 +56,19 @@ typedef struct result_user_add
int userID;
}USERADD;
typedef union
{
unsigned short id;
char uname[UNAMESIZE];
}USER_ID_NAME;
typedef struct
{
int type;
USER_ID_NAME id_name;
}USER_DEL;
/*初始化参数*/
int init_user();
@ -67,4 +87,13 @@ unsigned short get_userid_by_name(char* UNAME);
/* 修改用户-命令行 */
bool mod_user_line(char* UNAME, const int INTYPE, char* IN);
/* 修改用户-移动分组 */
bool move_user_group(unsigned short user_id, unsigned short group_id);
/* 删除用户
* id_name:ID
* type1-2-ID
*/
int usermanager_del_user(USER_DEL* id_name);
#endif

View File

@ -1,18 +1,20 @@
#ifndef USER_GROUP_H_
#define USER_GROUP_H_
#include <stdbool.h>
#define GNAMESIZE (127 + 1)
#define GDESIZE (127 + 1)
#define ADD_SUCCESS 0
#define ADD_FAIL_FULL 1
#define ADD_FAIL_LENGTH 2
#define ADD_FAIL_SPECHARS 3
#define ADD_FAIL_DUP 4
#define ADDGROUP_SUCCESS 0
#define ADDGROUP_FAIL_FULL 1
#define ADDGROUP_FAIL_LENGTH 2
#define ADDGROUP_FAIL_SPECHARS 3
#define ADDGROUP_FAIL_DUP 4
#define DEL_SUCCESS 0
#define DEL_FAIL_NOTEXIST 1
#define DEL_FAIL_STRTEGY 2
#define DELGROUP_SUCCESS 0
#define DELGROUP_FAIL_NOTEXIST 1
#define DELGROUP_FAIL_STRTEGY 2
typedef struct usergroup
{
@ -31,10 +33,10 @@ unsigned short add_group(char* UGNAME, char* UGDES);
unsigned short get_group_count();
/* 查询用户组列表 */
USERGROUP* show_group_list(USERGROUP* UGLIST);
bool show_group_list(USERGROUP* UGLIST);
/* 根据用户组名查询用户组 */
USERGROUP* find_group_by_name(char* UGNAME, USERGROUP* UGRES);
bool find_group_by_name(char* UGNAME, USERGROUP* UGRES);
/* 根据用户组名查询用户组ID */
unsigned short get_groupid_by_name(char* UGNAME);

View File

@ -39,27 +39,27 @@ void usermanager_add_user(char* uname, char* gname, USERADD* uaddres)
/* 校验用户名长度 */
if (NULL == uname || (UNAMESIZE) < strlen(uname) || 0 >= strlen(uname))
{
uaddres->result = ADD_FAIL_NAMELEN;
uaddres->result = ADDUSER_FAIL_NAMELEN;
return;
}
/* 校验用户名中不含特殊字符 */
if (SPECHAR(uname))
{
uaddres->result = ADD_FAIL_NAMESPE;
uaddres->result = ADDUSER_FAIL_NAMESPE;
return;
}
/* 根据用户组名查询用户组ID */
if(NULL == gname)
{
uaddres->result = ADD_FAIL_NOGROUP;
uaddres->result = ADDUSER_FAIL_NOGROUP;
return;
}
unsigned short GID_temp = get_groupid_by_name(gname);
if(INVALID_INDEX == GID_temp)
{
uaddres->result = ADD_FAIL_NOGROUP;
uaddres->result = ADDUSER_FAIL_NOGROUP;
return;
}
@ -68,7 +68,7 @@ void usermanager_add_user(char* uname, char* gname, USERADD* uaddres)
{
if (0 == strcmp(uname, g_user_table[i].uname))
{
uaddres->result = ADD_FAIL_NAMEDUP;
uaddres->result = ADDUSER_FAIL_NAMEDUP;
return;
}
}
@ -77,7 +77,7 @@ void usermanager_add_user(char* uname, char* gname, USERADD* uaddres)
unsigned short ID = alloc_index(&g_user_index_head);
if (INVALID_INDEX == ID)
{
uaddres->result = ADD_FAIL_USERFULL;
uaddres->result = ADDUSER_FAIL_USERFULL;
return;
}
@ -90,7 +90,7 @@ void usermanager_add_user(char* uname, char* gname, USERADD* uaddres)
/* 连接数据库存user表 */
/* INSERT INTO `user` SET id = , group_id = , user_name = "", password = "", multi_player = , valid_always = */
uaddres->result = ADD_SUCCESS;
uaddres->result = ADDUSER_SUCCESS;
uaddres->userID = ID;
return;
@ -271,3 +271,73 @@ bool mod_user_line(char* uname, const int intype, char* in)
return result;
}
/* 修改用户-移动分组 */
bool move_user_group(unsigned short user_id, unsigned short group_id)
{
if(user_id != g_user_table[user_id].ID || group_id != g_group_table[group_id].ID)
{
return false;
}
g_user_table[user_id].GID = group_id;
/* 连接数据库修改user表中的用户组id */
/* UPDATE `user` u SET u.group_id = WHERE u.id = ; */
/* 发送消息用户id - 用户组id到策略模块重查策略 */
return true;
}
/* 删除用户 */
int usermanager_del_user(USER_DEL* in)
{
unsigned short user_id_temp;
if(NULL == in)
{
return DELUSER_FAIL_NOTEXIST;
}
switch (in->type)
{
case DELUSER_BY_USERNAME:
if(NULL == in->id_name.uname)
{
return DELUSER_FAIL_NOTEXIST;
}
/* 根据用户名查询用户id */
user_id_temp = get_userid_by_name(in->id_name.uname);
if (INVALID_INDEX == user_id_temp)
{
return DELUSER_FAIL_NOTEXIST;
}
break;
case DELUSER_BY_USERID:
user_id_temp = in->id_name.id;
if(user_id_temp < 1 || user_id_temp >= (USER_INDEX_MAX-1))
{
return DELUSER_FAIL_NOTEXIST;
}
g_user_table[user_id_temp].ID = 0;
break;
default:
return DELUSER_FAIL_NOTEXIST;
break;
}
/* 调用策略提供的接口,查询是否绑定策略,如果绑定了策略,返回删除失败-2DELUSER_FAIL_STRTEGY*/
/* 根据用户ID删除用户列表中对应的用户 - 释放index、ID置0 */
free_index(&g_user_index_head, user_id_temp);
g_user_table[user_id_temp].ID = INVALID_INDEX;
/* DELETE FROM user WHERE user_name = "" */
/* 强制用户下线 */
return DELGROUP_SUCCESS;
}

View File

@ -5,8 +5,11 @@
#include "./include/array_index.h"
#include "./include/user_group.h"
#include "./include/common_user.h"
#include "./include/user.h"
extern ARRAY g_group_index_head;
extern ARRAY g_user_index_head;
extern USERACCOUNT g_user_table[];
USERGROUP g_group_table[GROUP_INDEX_MAX];
/* 初始化参数 */
@ -32,13 +35,13 @@ unsigned short add_group(char* name, char* description)
}
if (NULL == name || GNAMESIZE < strlen(name) || GDESIZE < strlen(description))
{
return ADD_FAIL_LENGTH;
return ADDGROUP_FAIL_LENGTH;
}
/* 校验特殊字符 */
if (SPECHAR(name))
{
return ADD_FAIL_SPECHARS;
return ADDGROUP_FAIL_SPECHARS;
}
/* 校验重名 */
@ -46,7 +49,7 @@ unsigned short add_group(char* name, char* description)
{
if (0 == strcmp(name, g_group_table[i].gname))
{
return ADD_FAIL_DUP;
return ADDGROUP_FAIL_DUP;
}
}
@ -54,7 +57,7 @@ unsigned short add_group(char* name, char* description)
unsigned short ID = alloc_index(&g_group_index_head);
if (INVALID_INDEX == ID)
{
return ADD_FAIL_FULL;
return ADDGROUP_FAIL_FULL;
}
/* 添加数据到内存g_group_table */
@ -65,15 +68,15 @@ unsigned short add_group(char* name, char* description)
/* 连接数据库向user_group表中添加用户组ID、用户组名和用户组描述 */
/* INSERT INTO user_group SET id = "", gname = "", gdescription = "" */
return ADD_SUCCESS;
return ADDGROUP_SUCCESS;
}
/* 查询用户组-按用户名 */
USERGROUP* find_group_by_name(char* gname, USERGROUP* groupout)
bool find_group_by_name(char* gname, USERGROUP* groupout)
{
if (NULL == gname || NULL == groupout)
{
return NULL;
return false;
}
/* 内存中查询数据 */
@ -85,18 +88,13 @@ USERGROUP* find_group_by_name(char* gname, USERGROUP* groupout)
groupout->ID = g_group_table[i].ID;
strcpy(groupout->gname, g_group_table[i].gname);
strcpy(groupout->gdescription, g_group_table[i].gdescription);
return groupout;
return true;
}
}
if (INVALID_INDEX == groupout->ID)
{
return NULL;
}
/* 连接数据库根据用户名查询表user_group */
/* SELECT UG.id, UG.gname, UG.gdescription FROM user_group UG WHERE UG.gname = "" */
return groupout;
}
@ -120,11 +118,11 @@ unsigned short get_group_count()
}
/* 查询用户组列表 */
USERGROUP* show_group_list(USERGROUP* grouplist)
bool show_group_list(USERGROUP* grouplist)
{
if (NULL == grouplist)
{
return NULL;
return false;
}
/* 内存查询数据 */
@ -143,7 +141,7 @@ USERGROUP* show_group_list(USERGROUP* grouplist)
/* 连接数据库查询表user_group列表 */
/* SELECT UG.id, UG.gname, UG.gdescription FROM user_group UG */
return grouplist;
return true;
}
unsigned short get_groupid_by_name(char* gname)
@ -168,9 +166,9 @@ unsigned short get_groupid_by_name(char* gname)
/*删除元素*/
unsigned short del_group_by_name(char* gname)
{
if (CHECKOUTARG(gname))
if (NULL == gname)
{
return DEL_FAIL_NOTEXIST;
return DELGROUP_FAIL_NOTEXIST;
}
/* 判断被删除的用户组是否存在 */
@ -178,12 +176,22 @@ unsigned short del_group_by_name(char* gname)
if (INVALID_INDEX == GID_temp)
{
return DEL_FAIL_NOTEXIST;
return DELGROUP_FAIL_NOTEXIST;
}
/* 调用策略提供的接口,查询是否绑定策略*/
/* 调用策略提供的接口,查询是否绑定策略,如果绑定了策略,返回删除失败-2DELGROUP_FAIL_STRTEGY */
/* 根据用户组ID删除用户列表中对应的用户 */
/* 根据用户组ID查询用户ID按照用户ID删除用户 */
for(int i = 1; i < USER_INDEX_MAX-1; i++)
{
if(g_user_table[i].GID == GID_temp)
{
free_index(&g_user_index_head, i);
g_user_table[i].ID = INVALID_INDEX;
}
}
/* 连接数据库根据用户组ID删除用户表中对应数据DELETE FROM user WHERE group_id = */
/* 根据用户组ID删除用户组列表中对应的用户组 - 释放index、ID置0 */
free_index(&g_group_index_head, GID_temp);
@ -193,5 +201,5 @@ unsigned short del_group_by_name(char* gname)
/* 强制用户下线 */
return DEL_SUCCESS;
return DELGROUP_SUCCESS;
}

View File

@ -44,7 +44,7 @@ bool mod_user_group(unsigned short uid, char* gname)
/* 连接数据库修改user表中的用户组id */
/* UPDATE `user` u SET u.group_id = WHERE u.id = ; */
/* 强制用户下线 */
/* 发送消息用户id - 用户组id到策略模块重查策略 */
return true;
}

View File

@ -393,7 +393,40 @@ int main(void)
printf("*********************************************************************************\n");
char * output4;
output4 = malloc(100);
if (NULL == output4)
{
printf("ulist fail");
}
char *testin4 = "{\"type\": 1,\"data\":[\"用户01\", \"用户02\", \"用户04\"]}";
int *a4 = 1;
ret_code c4 = user_config_proc(1, 1, testin4, 1, output4, a4);
printf("*******************************************************************************\n");
printf("这里是个测试第四次结果,删除用户:%d\n", c4);
printf("%s\n", output4);
printf("*******************************************************************************\n");
UCHAR_FREE(output4);
char * output5;
output5 = malloc(100);
if (NULL == output5)
{
printf("ulist fail");
}
char *testin5 = "{\"type\": 1,\"data\":[\"aaa\", \"aaa07\", \"aaa08\"]}";
int *a5 = 1;
ret_code c5 = usergroup_config_proc(1, 1, testin5, 1, output5, a5);
printf("*******************************************************************************\n");
printf("这里是个测试第四次结果,删除用户组:%d\n", c5);
printf("%s\n", output5);
printf("*******************************************************************************\n");
UCHAR_FREE(output5);
// USER_AUTH_RET* aret;
// aret = (USER_AUTH_RET*)malloc(sizeof(USER_AUTH_RET));