209 lines
4.6 KiB
C
209 lines
4.6 KiB
C
#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;
|
||
} |