secgateway/Product/user/user_manager/user_group.c

211 lines
4.4 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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