secgateway/Product/user/user_manager/user_group.c

211 lines
4.4 KiB
C
Raw Normal View History

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
#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;
}