#include #include #include #include "array_index.h" #include "user_group.h" #include "../../common/common_user.h" #define INIT_FAIL 1 #define INIT_SUCCESS 0 #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 DEL_SUCCESS 0 #define DEL_FAIL_NOTEXIST 1 #define DEL_FAIL_STRTEGY 2 extern ARRAY g_group_index_head; USERGROUP g_group_table[GROUP_INDEX_MAX]; /* 初始化参数 */ int InitUserGroup() { /* 初始化用户组的index */ int initResult = init_array(&g_group_index_head, GROUP_INDEX_MAX); if(INIT_FAIL == initResult) { return INIT_FAIL; } memset(g_group_table, 0, sizeof(g_group_table)); return INIT_SUCCESS; } /* 添加元素 */ unsigned short AddGroup(char* name, char* description) { /* 校验用户组名和描述的长度 */ if(NULL == description) { description = ""; } if(NULL ==name || GNAMESIZE < strlen(name) || GDESIZE < strlen(description)) { return ADD_FAIL_LENGTH; } /* 校验特殊字符 */ if(SPECHAR(name)) { return ADD_FAIL_SPECHARS; } /* 校验重名 */ for(int i = 0; i < GROUP_INDEX_MAX; i++) { if(strcmp(name, g_group_table[i].gname) == 0) { return ADD_FAIL_DUP; } } /* 生成用户组ID */ unsigned short ID = alloc_index(&g_group_index_head); if (INVALID_INDEX == ID) { return ADD_FAIL_FULL; } /* 添加数据到内存g_group_table */ g_group_table[ID].ID = ID; strcpy(g_group_table[ID].gname, name); strcpy(g_group_table[ID].gdescription, description); /* 连接数据库,向user_group表中添加:用户组ID、用户组名和用户组描述 */ /* INSERT INTO user_group SET id = "", gname = "", gdescription = "" */ return ADD_SUCCESS; } /* 查询用户组-按用户名 */ USERGROUP* findGroupByName(char* gname, USERGROUP* groupout) { if (NULL == gname || NULL == groupout) { return NULL; } /* 内存中查询数据 */ groupout->ID = 0; for (int i = 0; i < GROUP_INDEX_MAX; i++) { if ((strcmp(gname, g_group_table[i].gname) == 0) && (g_group_table[i].ID != 0)) { 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; } } if( 0 == groupout->ID ) { return NULL; } /* 连接数据库,根据用户名查询表user_group */ /* SELECT UG.id, UG.gname, UG.gdescription FROM user_group UG WHERE UG.gname = "" */ return groupout; } /* 获得用户组个数 */ unsigned short getGroupCount() { /* 内存查询数据 */ int num = 0; for (int i = 0; i < GROUP_INDEX_MAX; i++) { if(0 != g_group_table[i].ID) { num++; } } /* 连接数据库,查询表user_group中用户组数量 */ /* SELECT COUNT(1) FROM user_group; */ return num; } /* 查询用户组列表 */ USERGROUP* showUserGroupList(USERGROUP* grouplist) { if(NULL == grouplist) { return NULL; } /* 内存查询数据 */ int j = 0; for(int i = 0; i < GROUP_INDEX_MAX; i++) { if(g_group_table[i].ID != 0) { grouplist[j].ID = g_group_table[i].ID; strcpy(grouplist[j].gname, g_group_table[i].gname); strcpy(grouplist[j].gdescription, g_group_table[i].gdescription); j++; } } /* 连接数据库,查询表user_group列表 */ /* SELECT UG.id, UG.gname, UG.gdescription FROM user_group UG */ return grouplist; } unsigned short getGroupIDByGName(char* gname) { /* 内存查询数据 */ unsigned short GID_temp = 0; if(NULL == gname) { return GID_temp; } for (int i = 0; i < GROUP_INDEX_MAX && GID_temp == 0; i++) { GID_temp = GETGROUPID(g_group_table[i].ID, gname, g_group_table[i].gname); } /* 连接数据库,根据用户组名查询user_grooup表中的id */ /* SELECT UG.id FROM user_group UG WHERE UG.gname = "" */ return GID_temp; } /*删除元素*/ unsigned short DelGroupByName(char* gname) { if ( CHECKOUTARG(gname) ) { return DEL_FAIL_NOTEXIST; } /* 判断被删除的用户组是否存在 */ unsigned short GID_temp = getGroupIDByGName(gname); if (INVALID_INDEX == GID_temp) { return DEL_FAIL_NOTEXIST; } /* 调用策略提供的接口,查询是否绑定策略*/ /* 根据用户组ID删除用户列表中对应的用户 */ /* 根据用户组ID删除用户组列表中对应的用户组 - 释放index、ID置0 */ free_index(&g_group_index_head, GID_temp); g_group_table[GID_temp].ID = 0; /* DELETE FROM user_group WHERE gname = "" */ /* 强制用户下线 */ return DEL_SUCCESS; }