secgateway/Product/user/user_manager/user_group.c

209 lines
4.6 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"
extern ARRAY g_group_index_head;
USERGROUP g_group_table[GROUP_INDEX_MAX];
/* 初始化参数 */
int init_group()
{
const int INIT_FAIL = 1;
const int INIT_SUCCESS = 0;
/* 初始化用户组的index */
int init_result = init_array(&g_group_index_head, GROUP_INDEX_MAX);
if (INIT_FAIL == init_result)
{
return INIT_FAIL;
}
memset(g_group_table, 0, sizeof(g_group_table));
return INIT_SUCCESS;
}
/* 添加元素 */
unsigned short add_group(char* name, char* description)
{
const int ADD_SUCCESS = 0;
const int ADD_FAIL_FULL = 1;
const int ADD_FAIL_LENGTH = 2;
const int ADD_FAIL_SPECHARS = 3;
const int ADD_FAIL_DUP = 4;
/* 校验用户组名和描述的长度 */
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 (0 == strcmp(name, g_group_table[i].gname))
{
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* find_group_by_name(char* gname, USERGROUP* groupout)
{
if (NULL == gname || NULL == groupout)
{
return NULL;
}
/* 内存中查询数据 */
groupout->ID = INVALID_INDEX;
for (int i = 0; i < GROUP_INDEX_MAX; i++)
{
if ((0 == strcmp(gname, g_group_table[i].gname)) && (INVALID_INDEX != g_group_table[i].ID))
{
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 (INVALID_INDEX == groupout->ID)
{
return NULL;
}
/* 连接数据库根据用户名查询表user_group */
/* SELECT UG.id, UG.gname, UG.gdescription FROM user_group UG WHERE UG.gname = "" */
return groupout;
}
/* 获得用户组个数 */
unsigned short get_group_count()
{
/* 内存查询数据 */
int num = 0;
for (int i = 0; i < GROUP_INDEX_MAX; i++)
{
if (INVALID_INDEX != g_group_table[i].ID)
{
num++;
}
}
/* 连接数据库查询表user_group中用户组数量 */
/* SELECT COUNT(1) FROM user_group; */
return num;
}
/* 查询用户组列表 */
USERGROUP* show_group_list(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 get_groupid_by_name(char* gname)
{
/* 内存查询数据 */
unsigned short GID_temp = INVALID_INDEX;
if (NULL == gname)
{
return GID_temp;
}
for (int i = 0; i < GROUP_INDEX_MAX && INVALID_INDEX == GID_temp; i++)
{
GID_temp = GETID(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 del_group_by_name(char* gname)
{
const int DEL_SUCCESS = 0;
const int DEL_FAIL_NOTEXIST = 1;
const int DEL_FAIL_STRTEGY = 2;
if (CHECKOUTARG(gname))
{
return DEL_FAIL_NOTEXIST;
}
/* 判断被删除的用户组是否存在 */
unsigned short GID_temp = get_groupid_by_name(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 = INVALID_INDEX;
/* DELETE FROM user_group WHERE gname = "" */
/* 强制用户下线 */
return DEL_SUCCESS;
}