feat: 新增第三方登录认证和管理

This commit is contained in:
TsMask
2025-08-12 10:12:46 +08:00
parent b7e4948fbb
commit 9e57c145d1
62 changed files with 2086 additions and 721 deletions

View File

@@ -15,14 +15,6 @@ CREATE TABLE "mml_command" (
PRIMARY KEY ("id")
);
-- ----------------------------
-- Indexes structure for table mml_command
-- ----------------------------
CREATE INDEX "id"
ON "mml_command" (
"id" ASC
);
-- ----------------------------
-- Records of mml_command
-- ----------------------------

View File

@@ -1,21 +1,25 @@
-- ----------------------------
-- Table structure for cbc_message
-- ----------------------------
-- ----------------------------
-- Table structure for cbc_message
-- ----------------------------
DROP TABLE IF EXISTS `cbc_message`;
CREATE TABLE `cbc_message` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`ne_type` TEXT,
`ne_id` TEXT,
`message_json` TEXT,
`status` TEXT DEFAULT 'INACTIVE' CHECK(`status` IN ('ACTIVE', 'INACTIVE')),
`detail` TEXT,
`created_at` INTEGER,
`updated_at` INTEGER
CREATE TABLE "cbc_message" (
"id" integer NOT NULL,
"ne_type" text(32),
"ne_id" text(32),
"message_json" text(10240),
"status" text(32),
"detail" text(255),
"created_at" integer,
"updated_at" integer,
PRIMARY KEY ("id")
);
-- Create indexes
CREATE INDEX `idx_id` ON `cbc_message`(`id`);
CREATE INDEX `idx_ne_time` ON `cbc_message`(`ne_type`, `ne_id`, `created_at`);
-- ----------------------------
-- Indexes structure for table cbc_message
-- ----------------------------
CREATE INDEX "idx_cbcm_ne_time"
ON "cbc_message" (
"ne_type" ASC,
"ne_id" ASC,
"created_at" ASC
);

View File

@@ -192,4 +192,8 @@ INSERT INTO "sys_dict_data" VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_sip
INSERT INTO "sys_dict_data" VALUES (167, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO "sys_dict_data" VALUES (168, 'trace_interfaces', 'dictData.trace_interfaces.14', 'N14', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO "sys_dict_data" VALUES (169, 'trace_interfaces', 'dictData.trace_interfaces.5', 'N5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO "sys_dict_data" VALUES (170, 'sys_user_type', 'dictData.sys_user_type.system', 'System', 1, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO "sys_dict_data" VALUES (171, 'sys_user_type', 'dictData.sys_user_type.ldap', 'LDAP', 2, '', 'lime', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO "sys_dict_data" VALUES (172, 'sys_user_type', 'dictData.sys_user_type.smtp', 'SMTP', 3, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO "sys_dict_data" VALUES (173, 'sys_user_type', 'dictData.sys_user_type.oauth2', 'OAuth2', 4, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');

View File

@@ -27,6 +27,7 @@ INSERT INTO "sys_dict_type" VALUES (5, 'dictType.sys_job_group', 'sys_job_group'
INSERT INTO "sys_dict_type" VALUES (6, 'dictType.sys_yes_no', 'sys_yes_no', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no_remark');
INSERT INTO "sys_dict_type" VALUES (9, 'dictType.sys_oper_type', 'sys_oper_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type_remark');
INSERT INTO "sys_dict_type" VALUES (10, 'dictType.sys_common_status', 'sys_common_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status_remark');
INSERT INTO "sys_dict_type" VALUES (11, 'dictType.sys_user_type', 'sys_user_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO "sys_dict_type" VALUES (50, 'dictType.trace_type', 'trace_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type_remark');
INSERT INTO "sys_dict_type" VALUES (51, 'dictType.alarm_status', 'alarm_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status_remark');
INSERT INTO "sys_dict_type" VALUES (52, 'dictType.ne_version_status', 'ne_version_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status_remark');

View File

@@ -933,22 +933,30 @@ INSERT INTO "sys_i18n" VALUES (757, 'dictData.trace_interfaces.5', 'N5', 'N5');
INSERT INTO "sys_i18n" VALUES (758, "alarm.export.alarmCode", "告警编码", "Alarm Code");
INSERT INTO "sys_i18n" VALUES (759, "config.sys.user.fristPasswdChangeRemark", "关闭改为false 开启改为true, 建议同时设置密码有效期", "Off to false On to true, it is recommended to set the password expiration date at the same time.");
INSERT INTO "sys_i18n" VALUES (760, "menu.perf.kpiIMSOverview", "语音数据概览", "Voice Data Overview");
INSERT INTO "sys_i18n" VALUES (761, "dictType.sys_user_type", "用户类型", "User Type");
INSERT INTO "sys_i18n" VALUES (762, "dictData.sys_user_type.system", "系统", "System");
INSERT INTO "sys_i18n" VALUES (763, "dictData.sys_user_type.ldap", "LDAP", "LDAP");
INSERT INTO "sys_i18n" VALUES (764, "dictData.sys_user_type.smtp", "SMTP", "SMTP");
INSERT INTO "sys_i18n" VALUES (765, "dictData.sys_user_type.oauth2", "OAuth2", "OAuth2");
INSERT INTO "sys_i18n" VALUES (766, "user.export.userType", "用户类型", "User Type");
INSERT INTO "sys_i18n" VALUES (767, "menu.system.loginSource", "第三方登录认证", "Third Party Login Source");
INSERT INTO "sys_i18n" VALUES (768, "log.operate.title.sysLoginSource", "认证源", "Login Source");
INSERT INTO `sys_i18n` VALUES (2000, 'menu.psap.agent', '座席', 'Agent');
INSERT INTO `sys_i18n` VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information');
INSERT INTO `sys_i18n` VALUES (2002, 'menu.psap.agent.callback', '回拨管理', 'Callback Management');
INSERT INTO `sys_i18n` VALUES (2003, 'callback.status.NEW', '新建', 'New');
INSERT INTO `sys_i18n` VALUES (2004, 'callback.status.IN_PROGRESS', '处理中', 'In Progress');
INSERT INTO `sys_i18n` VALUES (2005, 'callback.status.NO_ANSWER_1', '未应答1', 'No Answer 1');
INSERT INTO `sys_i18n` VALUES (2006, 'callback.status.NO_ANSWER_2', '未应答2', 'No Answer 2');
INSERT INTO `sys_i18n` VALUES (2007, 'callback.status.TIMEOUT', '超时', 'Timeout');
INSERT INTO `sys_i18n` VALUES (2008, 'callback.status.PENDING', '挂起', 'Pending');
INSERT INTO `sys_i18n` VALUES (2009, 'callback.status.CLOSED', '关闭', 'Closed');
INSERT INTO `sys_i18n` VALUES (2010, 'job.export.cdr.mf', '定期导出MF话单', 'Periodic Export of MF Call Records');
INSERT INTO `sys_i18n` VALUES (2011, 'job.psap.ticket.monitor', '回拨工单监控', 'Callback Ticket Monitoring');
INSERT INTO `sys_i18n` VALUES (2012, 'menu.omc.cdr', '话单', 'Call Records');
INSERT INTO `sys_i18n` VALUES (2013, 'menu.omc.cdr.mf', '紧急呼叫话单', 'Emergency Call Records');
INSERT INTO `sys_i18n` VALUES (2014, 'menu.omc.cdr.crbt', '彩铃话单', 'Color Ring Back Tone Records');
INSERT INTO `sys_i18n` VALUES (2015, 'menu.omc.cdr.mms', '彩信话单', 'Multimedia Message Service Records');
INSERT INTO `sys_i18n` VALUES (2016, 'menu.ue.cbc.cbe', '预警广播', 'Early Warning Broadcast');
INSERT INTO `sys_i18n` VALUES (2017, 'log.operate.title.cbcMessage', '预警广播', 'Early Warning Broadcast');
INSERT INTO "sys_i18n" VALUES (2000, 'menu.psap.agent', '座席', 'Agent');
INSERT INTO "sys_i18n" VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information');
INSERT INTO "sys_i18n" VALUES (2002, 'menu.psap.agent.callback', '回拨管理', 'Callback Management');
INSERT INTO "sys_i18n" VALUES (2003, 'callback.status.NEW', '新建', 'New');
INSERT INTO "sys_i18n" VALUES (2004, 'callback.status.IN_PROGRESS', '处理中', 'In Progress');
INSERT INTO "sys_i18n" VALUES (2005, 'callback.status.NO_ANSWER_1', '未应答1', 'No Answer 1');
INSERT INTO "sys_i18n" VALUES (2006, 'callback.status.NO_ANSWER_2', '未应答2', 'No Answer 2');
INSERT INTO "sys_i18n" VALUES (2007, 'callback.status.TIMEOUT', '超时', 'Timeout');
INSERT INTO "sys_i18n" VALUES (2008, 'callback.status.PENDING', '挂起', 'Pending');
INSERT INTO "sys_i18n" VALUES (2009, 'callback.status.CLOSED', '关闭', 'Closed');
INSERT INTO "sys_i18n" VALUES (2010, 'job.export.cdr.mf', '定期导出MF话单', 'Periodic Export of MF Call Records');
INSERT INTO "sys_i18n" VALUES (2011, 'job.psap.ticket.monitor', '回拨工单监控', 'Callback Ticket Monitoring');
INSERT INTO "sys_i18n" VALUES (2012, 'menu.omc.cdr', '话单', 'Call Records');
INSERT INTO "sys_i18n" VALUES (2013, 'menu.omc.cdr.mf', '紧急呼叫话单', 'Emergency Call Records');
INSERT INTO "sys_i18n" VALUES (2014, 'menu.omc.cdr.crbt', '彩铃话单', 'Color Ring Back Tone Records');
INSERT INTO "sys_i18n" VALUES (2015, 'menu.omc.cdr.mms', '彩信话单', 'Multimedia Message Service Records');
INSERT INTO "sys_i18n" VALUES (2016, 'menu.ue.cbc.cbe', '预警广播', 'Early Warning Broadcast');
INSERT INTO "sys_i18n" VALUES (2017, 'log.operate.title.cbcMessage', '预警广播', 'Early Warning Broadcast');

View File

@@ -0,0 +1,33 @@
-- ----------------------------
-- Table structure for sys_login_source
-- ----------------------------
DROP TABLE IF EXISTS "sys_login_source";
CREATE TABLE "sys_login_source" (
"id" integer NOT NULL,
"uid" text(32),
"type" text(32),
"name" text(64),
"icon" text(255),
"active_flag" text(1),
"sync_flag" text(1),
"config" text,
"create_by" text(64),
"create_time" integer,
"update_by" text(64),
"update_time" integer,
"remark" text(500),
PRIMARY KEY ("id")
);
-- ----------------------------
-- Indexes structure for table sys_login_source
-- ----------------------------
CREATE INDEX "idx_ls_type_name"
ON "sys_login_source" (
"type" ASC,
"name" ASC
);
-- ----------------------------
-- Records of sys_login_source
-- ----------------------------

View File

@@ -47,6 +47,7 @@ INSERT INTO "sys_menu" VALUES (105, 'menu.security.post', 2113, 6, 'post', 'syst
INSERT INTO "sys_menu" VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.dictTypeRemark');
INSERT INTO "sys_menu" VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.dictDataRemark');
INSERT INTO "sys_menu" VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.paramSetRemark');
INSERT INTO "sys_menu" VALUES (109, 'menu.system.loginSource', 2113, 12, 'login-source', 'system/login-source/index', '1', '1', 'M', '1', '1', 'system:loginSource:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (111, 'menu.system.systemLog', 1, 11, 'log', '', '1', '1', 'D', '0', '0', '', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemLogRemark');
INSERT INTO "sys_menu" VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemInfoRemark');
INSERT INTO "sys_menu" VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.cacheInfoRemark');
@@ -109,6 +110,10 @@ INSERT INTO "sys_menu" VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1', '
INSERT INTO "sys_menu" VALUES (1054, 'menu.common.delete', 116, 4, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (1055, 'menu.common.edit', 116, 5, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', '0', 'system', 1728641403588, 'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (1056, 'menu.common.export', 116, 6, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (1057, 'menu.common.query', 109, 1, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (1058, 'menu.common.add', 109, 2, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (1059, 'menu.common.edit', 109, 3, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (1060, 'menu.common.delete', 109, 4, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (2000, 'menu.neData.udmAuth', 5, 1, 'udm-auth', 'neData/udm-auth/index', '1', '1', 'M', '1', '1', 'udm#auth:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (2001, 'menu.neData.udmSub', 5, 3, 'udm-sub', 'neData/udm-sub/index', '1', '1', 'M', '1', '1', 'udm#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, '');
INSERT INTO "sys_menu" VALUES (2002, 'menu.neData.udmVOIP', 5, 5, 'udm-voip', 'neData/udm-voip/index', '1', '0', 'M', '1', '1', 'udm#voip:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, '');

View File

@@ -3,8 +3,8 @@
-- ----------------------------
DROP TABLE IF EXISTS "sys_role_menu";
CREATE TABLE "sys_role_menu" (
"role_id" integer(20) NOT NULL,
"menu_id" integer(20) NOT NULL,
"role_id" integer NOT NULL,
"menu_id" integer NOT NULL,
PRIMARY KEY ("role_id", "menu_id")
);
@@ -27,6 +27,7 @@ INSERT INTO "sys_role_menu" VALUES (2, 103);
INSERT INTO "sys_role_menu" VALUES (2, 104);
INSERT INTO "sys_role_menu" VALUES (2, 105);
INSERT INTO "sys_role_menu" VALUES (2, 108);
INSERT INTO "sys_role_menu" VALUES (2, 109);
INSERT INTO "sys_role_menu" VALUES (2, 111);
INSERT INTO "sys_role_menu" VALUES (2, 112);
INSERT INTO "sys_role_menu" VALUES (2, 115);
@@ -63,10 +64,8 @@ INSERT INTO "sys_role_menu" VALUES (2, 1030);
INSERT INTO "sys_role_menu" VALUES (2, 1032);
INSERT INTO "sys_role_menu" VALUES (2, 1034);
INSERT INTO "sys_role_menu" VALUES (2, 1039);
INSERT INTO "sys_role_menu" VALUES (2, 1040);
INSERT INTO "sys_role_menu" VALUES (2, 1041);
INSERT INTO "sys_role_menu" VALUES (2, 1042);
INSERT INTO "sys_role_menu" VALUES (2, 1043);
INSERT INTO "sys_role_menu" VALUES (2, 1044);
INSERT INTO "sys_role_menu" VALUES (2, 1045);
INSERT INTO "sys_role_menu" VALUES (2, 1048);
@@ -78,6 +77,10 @@ INSERT INTO "sys_role_menu" VALUES (2, 1053);
INSERT INTO "sys_role_menu" VALUES (2, 1054);
INSERT INTO "sys_role_menu" VALUES (2, 1055);
INSERT INTO "sys_role_menu" VALUES (2, 1056);
INSERT INTO "sys_role_menu" VALUES (2, 1057);
INSERT INTO "sys_role_menu" VALUES (2, 1058);
INSERT INTO "sys_role_menu" VALUES (2, 1059);
INSERT INTO "sys_role_menu" VALUES (2, 1060);
INSERT INTO "sys_role_menu" VALUES (2, 2000);
INSERT INTO "sys_role_menu" VALUES (2, 2001);
INSERT INTO "sys_role_menu" VALUES (2, 2002);
@@ -168,7 +171,6 @@ INSERT INTO "sys_role_menu" VALUES (3, 65);
INSERT INTO "sys_role_menu" VALUES (3, 66);
INSERT INTO "sys_role_menu" VALUES (3, 108);
INSERT INTO "sys_role_menu" VALUES (3, 112);
INSERT INTO "sys_role_menu" VALUES (3, 115);
INSERT INTO "sys_role_menu" VALUES (3, 500);
INSERT INTO "sys_role_menu" VALUES (3, 501);
INSERT INTO "sys_role_menu" VALUES (3, 1030);
@@ -176,7 +178,6 @@ INSERT INTO "sys_role_menu" VALUES (3, 1032);
INSERT INTO "sys_role_menu" VALUES (3, 1034);
INSERT INTO "sys_role_menu" VALUES (3, 1039);
INSERT INTO "sys_role_menu" VALUES (3, 1042);
INSERT INTO "sys_role_menu" VALUES (3, 1048);
INSERT INTO "sys_role_menu" VALUES (3, 2000);
INSERT INTO "sys_role_menu" VALUES (3, 2001);
INSERT INTO "sys_role_menu" VALUES (3, 2002);
@@ -189,6 +190,7 @@ INSERT INTO "sys_role_menu" VALUES (3, 2009);
INSERT INTO "sys_role_menu" VALUES (3, 2010);
INSERT INTO "sys_role_menu" VALUES (3, 2011);
INSERT INTO "sys_role_menu" VALUES (3, 2083);
INSERT INTO "sys_role_menu" VALUES (3, 2084);
INSERT INTO "sys_role_menu" VALUES (3, 2086);
INSERT INTO "sys_role_menu" VALUES (3, 2087);
INSERT INTO "sys_role_menu" VALUES (3, 2088);
@@ -200,10 +202,12 @@ INSERT INTO "sys_role_menu" VALUES (3, 2097);
INSERT INTO "sys_role_menu" VALUES (3, 2107);
INSERT INTO "sys_role_menu" VALUES (3, 2108);
INSERT INTO "sys_role_menu" VALUES (3, 2109);
INSERT INTO "sys_role_menu" VALUES (3, 2113);
INSERT INTO "sys_role_menu" VALUES (3, 2112);
INSERT INTO "sys_role_menu" VALUES (3, 2114);
INSERT INTO "sys_role_menu" VALUES (3, 2115);
INSERT INTO "sys_role_menu" VALUES (3, 2116);
INSERT INTO "sys_role_menu" VALUES (3, 2118);
INSERT INTO "sys_role_menu" VALUES (3, 2122);
INSERT INTO "sys_role_menu" VALUES (3, 2123);
INSERT INTO "sys_role_menu" VALUES (3, 2126);
INSERT INTO "sys_role_menu" VALUES (3, 2128);
@@ -224,11 +228,10 @@ INSERT INTO "sys_role_menu" VALUES (3, 2149);
INSERT INTO "sys_role_menu" VALUES (3, 2151);
INSERT INTO "sys_role_menu" VALUES (3, 2152);
INSERT INTO "sys_role_menu" VALUES (3, 2153);
INSERT INTO "sys_role_menu" VALUES (3, 2154);
INSERT INTO "sys_role_menu" VALUES (3, 2155);
INSERT INTO "sys_role_menu" VALUES (3, 2156);
INSERT INTO "sys_role_menu" VALUES (3, 2157);
INSERT INTO "sys_role_menu" VALUES (3, 2158);
INSERT INTO "sys_role_menu" VALUES (3, 2162);
INSERT INTO "sys_role_menu" VALUES (3, 2163);
INSERT INTO "sys_role_menu" VALUES (3, 2165);
INSERT INTO "sys_role_menu" VALUES (3, 2166);
INSERT INTO "sys_role_menu" VALUES (3, 2167);
@@ -238,9 +241,6 @@ INSERT INTO "sys_role_menu" VALUES (3, 20000);
INSERT INTO "sys_role_menu" VALUES (4, 1);
INSERT INTO "sys_role_menu" VALUES (4, 4);
INSERT INTO "sys_role_menu" VALUES (4, 60);
INSERT INTO "sys_role_menu" VALUES (4, 65);
INSERT INTO "sys_role_menu" VALUES (4, 66);
INSERT INTO "sys_role_menu" VALUES (4, 112);
INSERT INTO "sys_role_menu" VALUES (4, 115);
INSERT INTO "sys_role_menu" VALUES (4, 500);
@@ -250,17 +250,18 @@ INSERT INTO "sys_role_menu" VALUES (4, 1041);
INSERT INTO "sys_role_menu" VALUES (4, 1042);
INSERT INTO "sys_role_menu" VALUES (4, 1044);
INSERT INTO "sys_role_menu" VALUES (4, 1048);
INSERT INTO "sys_role_menu" VALUES (4, 2083);
INSERT INTO "sys_role_menu" VALUES (4, 2086);
INSERT INTO "sys_role_menu" VALUES (4, 2087);
INSERT INTO "sys_role_menu" VALUES (4, 2088);
INSERT INTO "sys_role_menu" VALUES (4, 2089);
INSERT INTO "sys_role_menu" VALUES (4, 2091);
INSERT INTO "sys_role_menu" VALUES (4, 2092);
INSERT INTO "sys_role_menu" VALUES (4, 2094);
INSERT INTO "sys_role_menu" VALUES (4, 2097);
INSERT INTO "sys_role_menu" VALUES (4, 2112);
INSERT INTO "sys_role_menu" VALUES (4, 2113);
INSERT INTO "sys_role_menu" VALUES (4, 2114);
INSERT INTO "sys_role_menu" VALUES (4, 2115);
INSERT INTO "sys_role_menu" VALUES (4, 2116);
INSERT INTO "sys_role_menu" VALUES (4, 2123);
INSERT INTO "sys_role_menu" VALUES (4, 2126);
INSERT INTO "sys_role_menu" VALUES (4, 2128);
INSERT INTO "sys_role_menu" VALUES (4, 2129);
@@ -274,11 +275,7 @@ INSERT INTO "sys_role_menu" VALUES (4, 2141);
INSERT INTO "sys_role_menu" VALUES (4, 2147);
INSERT INTO "sys_role_menu" VALUES (4, 2148);
INSERT INTO "sys_role_menu" VALUES (4, 2149);
INSERT INTO "sys_role_menu" VALUES (4, 2151);
INSERT INTO "sys_role_menu" VALUES (4, 2152);
INSERT INTO "sys_role_menu" VALUES (4, 2153);
INSERT INTO "sys_role_menu" VALUES (4, 2157);
INSERT INTO "sys_role_menu" VALUES (4, 2163);
INSERT INTO "sys_role_menu" VALUES (4, 2165);
INSERT INTO "sys_role_menu" VALUES (4, 2166);
INSERT INTO "sys_role_menu" VALUES (4, 2167);
@@ -290,6 +287,13 @@ INSERT INTO "sys_role_menu" VALUES (5, 4);
INSERT INTO "sys_role_menu" VALUES (5, 112);
INSERT INTO "sys_role_menu" VALUES (5, 2087);
INSERT INTO "sys_role_menu" VALUES (5, 2115);
INSERT INTO "sys_role_menu" VALUES (5, 2126);
INSERT INTO "sys_role_menu" VALUES (5, 2128);
INSERT INTO "sys_role_menu" VALUES (5, 2130);
INSERT INTO "sys_role_menu" VALUES (5, 2131);
INSERT INTO "sys_role_menu" VALUES (5, 2132);
INSERT INTO "sys_role_menu" VALUES (5, 2165);
INSERT INTO "sys_role_menu" VALUES (5, 2166);
INSERT INTO "sys_role_menu" VALUES (5, 2167);
INSERT INTO "sys_role_menu" VALUES (5, 2168);
INSERT INTO "sys_role_menu" VALUES (5, 2169);

View File

@@ -12,6 +12,8 @@ CREATE TABLE "sys_user" (
"sex" text(1),
"avatar" text(255),
"password" text(128),
"user_type" text(20),
"user_source" text(32),
"status_flag" text(1),
"del_flag" text(1),
"password_update_time" integer,
@@ -29,7 +31,7 @@ CREATE TABLE "sys_user" (
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');

View File

@@ -1,17 +1,24 @@
-- ----------------------------
-- Table structure for cbc_message
-- ----------------------------
CREATE TABLE IF NOT EXISTS `cbc_message` (
`id` INTEGER PRIMARY KEY AUTOINCREMENT,
`ne_type` TEXT,
`ne_id` TEXT,
`message_json` TEXT,
`status` TEXT DEFAULT 'INACTIVE' CHECK(`status` IN ('ACTIVE', 'INACTIVE')),
`detail` TEXT,
`created_at` INTEGER,
`updated_at` INTEGER
CREATE TABLE IF NOT EXISTS "cbc_message" (
"id" integer NOT NULL,
"ne_type" text(32),
"ne_id" text(32),
"message_json" text(10240),
"status" text(32),
"detail" text(255),
"created_at" integer,
"updated_at" integer,
PRIMARY KEY ("id")
);
-- Create indexes
CREATE INDEX IF NOT EXISTS `idx_id` ON `cbc_message`(`id`);
CREATE INDEX IF NOT EXISTS `idx_ne_time` ON `cbc_message`(`ne_type`, `ne_id`, `created_at`);
-- ----------------------------
-- Indexes structure for table cbc_message
-- ----------------------------
CREATE INDEX IF NOT EXISTS "idx_cbcm_ne_time"
ON "cbc_message" (
"ne_type" ASC,
"ne_id" ASC,
"created_at" ASC
);

View File

@@ -191,4 +191,8 @@ REPLACE INTO "sys_dict_data" VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_si
REPLACE INTO "sys_dict_data" VALUES (167, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_data" VALUES (168, 'trace_interfaces', 'dictData.trace_interfaces.14', 'N14', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_data" VALUES (169, 'trace_interfaces', 'dictData.trace_interfaces.5', 'N5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_data" VALUES (170, 'sys_user_type', 'dictData.sys_user_type.system', 'System', 1, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_data" VALUES (171, 'sys_user_type', 'dictData.sys_user_type.ldap', 'LDAP', 2, '', 'lime', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_data" VALUES (172, 'sys_user_type', 'dictData.sys_user_type.smtp', 'SMTP', 3, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_data" VALUES (173, 'sys_user_type', 'dictData.sys_user_type.oauth2', 'OAuth2', 4, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');

View File

@@ -0,0 +1,54 @@
-- ----------------------------
-- Table structure for sys_dict_type
-- ----------------------------
CREATE TABLE IF NOT EXISTS "sys_dict_type" (
"dict_id" integer NOT NULL,
"dict_name" text(64) NOT NULL,
"dict_type" text(64) NOT NULL,
"status_flag" text(1),
"del_flag" text(1),
"create_by" text(64),
"create_time" integer(20),
"update_by" text(64),
"update_time" integer(20),
"remark" text(500),
PRIMARY KEY ("dict_id")
);
-- ----------------------------
-- Records of sys_dict_type
-- ----------------------------
REPLACE INTO "sys_dict_type" VALUES (1, 'dictType.sys_user_sex', 'sys_user_sex', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_user_sex_remark');
REPLACE INTO "sys_dict_type" VALUES (2, 'dictType.sys_show_hide', 'sys_show_hide', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_show_hide_remark');
REPLACE INTO "sys_dict_type" VALUES (3, 'dictType.sys_normal_disable', 'sys_normal_disable', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_normal_disable_remark');
REPLACE INTO "sys_dict_type" VALUES (4, 'dictType.sys_job_status', 'sys_job_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_status_remark');
REPLACE INTO "sys_dict_type" VALUES (5, 'dictType.sys_job_group', 'sys_job_group', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_job_group_remark');
REPLACE INTO "sys_dict_type" VALUES (6, 'dictType.sys_yes_no', 'sys_yes_no', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no_remark');
REPLACE INTO "sys_dict_type" VALUES (9, 'dictType.sys_oper_type', 'sys_oper_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type_remark');
REPLACE INTO "sys_dict_type" VALUES (10, 'dictType.sys_common_status', 'sys_common_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status_remark');
REPLACE INTO "sys_dict_type" VALUES (11, 'dictType.sys_user_type', 'sys_user_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (50, 'dictType.trace_type', 'trace_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type_remark');
REPLACE INTO "sys_dict_type" VALUES (51, 'dictType.alarm_status', 'alarm_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status_remark');
REPLACE INTO "sys_dict_type" VALUES (52, 'dictType.ne_version_status', 'ne_version_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status_remark');
REPLACE INTO "sys_dict_type" VALUES (53, 'dictType.sys_role_datascope', 'sys_role_datascope', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_role_datascope_remark');
REPLACE INTO "sys_dict_type" VALUES (54, 'dictType.active_alarm_type', 'active_alarm_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_type_remark');
REPLACE INTO "sys_dict_type" VALUES (55, 'dictType.active_clear_type', 'active_clear_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_clear_type_remark');
REPLACE INTO "sys_dict_type" VALUES (56, 'dictType.active_ack_state', 'active_ack_state', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_ack_state_remark');
REPLACE INTO "sys_dict_type" VALUES (57, 'dictType.active_alarm_severity', 'active_alarm_severity', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.active_alarm_severity_remark');
REPLACE INTO "sys_dict_type" VALUES (58, 'dictType.index_status', 'index_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.index_status_remark');
REPLACE INTO "sys_dict_type" VALUES (59, 'dictType.cdr_sip_code', 'cdr_sip_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (60, 'dictType.cdr_call_type', 'cdr_call_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (61, 'dictType.ue_auth_code', 'ue_auth_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (62, 'dictType.ue_event_type', 'ue_event_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (63, 'dictType.ue_event_cm_state', 'ue_event_cm_state', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (64, 'dictType.ne_host_type', 'ne_host_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (65, 'dictType.ne_host_groupId', 'ne_host_groupId', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (66, 'dictType.ne_host_authMode', 'ne_host_authMode', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (67, 'dictType.ne_host_cmd_groupId', 'ne_host_cmd_groupId', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (68, 'dictType.ne_info_status', 'ne_info_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (69, 'dictType.ne_license_status', 'ne_license_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (70, 'dictType.cdr_cause_code', 'cdr_cause_code', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (71, 'dictType.trace_msg_type', 'trace_msg_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (72, 'dictType.trace_msg_direct', 'trace_msg_direct', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (73, 'dictType.trace_interfaces', 'trace_interfaces', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO "sys_dict_type" VALUES (74, 'dictType.cdr_sip_code_cause', 'cdr_sip_code_cause', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');

View File

@@ -932,22 +932,30 @@ REPLACE INTO "sys_i18n" VALUES (757, 'dictData.trace_interfaces.5', 'N5', 'N5');
REPLACE INTO "sys_i18n" VALUES (758, "alarm.export.alarmCode", "告警编码", "Alarm Code");
REPLACE INTO "sys_i18n" VALUES (759, "config.sys.user.fristPasswdChangeRemark", "关闭改为false 开启改为true, 建议同时设置密码有效期", "Off to false On to true, it is recommended to set the password expiration date at the same time.");
REPLACE INTO "sys_i18n" VALUES (760, "menu.perf.kpiIMSOverview", "语音数据概览", "Voice Data Overview");
REPLACE INTO "sys_i18n" VALUES (761, "dictType.sys_user_type", "用户类型", "User Type");
REPLACE INTO "sys_i18n" VALUES (762, "dictData.sys_user_type.system", "系统", "System");
REPLACE INTO "sys_i18n" VALUES (763, "dictData.sys_user_type.ldap", "LDAP", "LDAP");
REPLACE INTO "sys_i18n" VALUES (764, "dictData.sys_user_type.smtp", "SMTP", "SMTP");
REPLACE INTO "sys_i18n" VALUES (765, "dictData.sys_user_type.oauth2", "OAuth2", "OAuth2");
REPLACE INTO "sys_i18n" VALUES (766, "user.export.userType", "用户类型", "User Type");
REPLACE INTO "sys_i18n" VALUES (767, "menu.system.loginSource", "第三方登录认证", "Third Party Login Source");
REPLACE INTO "sys_i18n" VALUES (768, "log.operate.title.sysLoginSource", "认证源", "Login Source");
REPLACE INTO `sys_i18n` VALUES (2000, 'menu.psap.agent', '座席', 'Agent');
REPLACE INTO `sys_i18n` VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information');
REPLACE INTO `sys_i18n` VALUES (2002, 'menu.psap.agent.callback', '回拨管理', 'Callback Management');
REPLACE INTO `sys_i18n` VALUES (2003, 'callback.status.NEW', '新建', 'New');
REPLACE INTO `sys_i18n` VALUES (2004, 'callback.status.IN_PROGRESS', '处理中', 'In Progress');
REPLACE INTO `sys_i18n` VALUES (2005, 'callback.status.NO_ANSWER_1', '未应答1', 'No Answer 1');
REPLACE INTO `sys_i18n` VALUES (2006, 'callback.status.NO_ANSWER_2', '未应答2', 'No Answer 2');
REPLACE INTO `sys_i18n` VALUES (2007, 'callback.status.TIMEOUT', '超时', 'Timeout');
REPLACE INTO `sys_i18n` VALUES (2008, 'callback.status.PENDING', '挂起', 'Pending');
REPLACE INTO `sys_i18n` VALUES (2009, 'callback.status.CLOSED', '关闭', 'Closed');
REPLACE INTO `sys_i18n` VALUES (2010, 'job.export.cdr.mf', '定期导出MF话单', 'Periodic Export of MF Call Records');
REPLACE INTO `sys_i18n` VALUES (2011, 'job.psap.ticket.monitor', '回拨工单监控', 'Callback Ticket Monitoring');
REPLACE INTO `sys_i18n` VALUES (2012, 'menu.omc.cdr', '话单', 'Call Records');
REPLACE INTO `sys_i18n` VALUES (2013, 'menu.omc.cdr.mf', '紧急呼叫话单', 'Emergency Call Records');
REPLACE INTO `sys_i18n` VALUES (2014, 'menu.omc.cdr.crbt', '彩铃话单', 'Color Ring Back Tone Records');
REPLACE INTO `sys_i18n` VALUES (2015, 'menu.omc.cdr.mms', '彩信话单', 'Multimedia Message Service Records');
REPLACE INTO `sys_i18n` VALUES (2016, 'menu.ue.cbc.cbe', '预警广播', 'Early Warning Broadcast');
REPLACE INTO `sys_i18n` VALUES (2017, 'log.operate.title.cbcMessage', '预警广播', 'Early Warning Broadcast');
REPLACE INTO "sys_i18n" VALUES (2000, 'menu.psap.agent', '座席', 'Agent');
REPLACE INTO "sys_i18n" VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information');
REPLACE INTO "sys_i18n" VALUES (2002, 'menu.psap.agent.callback', '回拨管理', 'Callback Management');
REPLACE INTO "sys_i18n" VALUES (2003, 'callback.status.NEW', '新建', 'New');
REPLACE INTO "sys_i18n" VALUES (2004, 'callback.status.IN_PROGRESS', '处理中', 'In Progress');
REPLACE INTO "sys_i18n" VALUES (2005, 'callback.status.NO_ANSWER_1', '未应答1', 'No Answer 1');
REPLACE INTO "sys_i18n" VALUES (2006, 'callback.status.NO_ANSWER_2', '未应答2', 'No Answer 2');
REPLACE INTO "sys_i18n" VALUES (2007, 'callback.status.TIMEOUT', '超时', 'Timeout');
REPLACE INTO "sys_i18n" VALUES (2008, 'callback.status.PENDING', '挂起', 'Pending');
REPLACE INTO "sys_i18n" VALUES (2009, 'callback.status.CLOSED', '关闭', 'Closed');
REPLACE INTO "sys_i18n" VALUES (2010, 'job.export.cdr.mf', '定期导出MF话单', 'Periodic Export of MF Call Records');
REPLACE INTO "sys_i18n" VALUES (2011, 'job.psap.ticket.monitor', '回拨工单监控', 'Callback Ticket Monitoring');
REPLACE INTO "sys_i18n" VALUES (2012, 'menu.omc.cdr', '话单', 'Call Records');
REPLACE INTO "sys_i18n" VALUES (2013, 'menu.omc.cdr.mf', '紧急呼叫话单', 'Emergency Call Records');
REPLACE INTO "sys_i18n" VALUES (2014, 'menu.omc.cdr.crbt', '彩铃话单', 'Color Ring Back Tone Records');
REPLACE INTO "sys_i18n" VALUES (2015, 'menu.omc.cdr.mms', '彩信话单', 'Multimedia Message Service Records');
REPLACE INTO "sys_i18n" VALUES (2016, 'menu.ue.cbc.cbe', '预警广播', 'Early Warning Broadcast');
REPLACE INTO "sys_i18n" VALUES (2017, 'log.operate.title.cbcMessage', '预警广播', 'Early Warning Broadcast');

View File

@@ -0,0 +1,32 @@
-- ----------------------------
-- Table structure for sys_login_source
-- ----------------------------
CREATE TABLE IF NOT EXISTS "sys_login_source" (
"id" integer NOT NULL,
"uid" text(32),
"type" text(32),
"name" text(64),
"icon" text(255),
"active_flag" text(1),
"sync_flag" text(1),
"config" text,
"create_by" text(64),
"create_time" integer,
"update_by" text(64),
"update_time" integer,
"remark" text(500),
PRIMARY KEY ("id")
);
-- ----------------------------
-- Indexes structure for table sys_login_source
-- ----------------------------
CREATE INDEX IF NOT EXISTS "idx_ls_type_name"
ON "sys_login_source" (
"type" ASC,
"name" ASC
);
-- ----------------------------
-- Records of sys_login_source
-- ----------------------------

View File

@@ -46,6 +46,7 @@ REPLACE INTO "sys_menu" VALUES (105, 'menu.security.post', 2113, 6, 'post', 'sys
REPLACE INTO "sys_menu" VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.dictTypeRemark');
REPLACE INTO "sys_menu" VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.dictDataRemark');
REPLACE INTO "sys_menu" VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.paramSetRemark');
REPLACE INTO "sys_menu" VALUES (109, 'menu.system.loginSource', 2113, 12, 'login-source', 'system/login-source/index', '1', '1', 'M', '1', '1', 'system:loginSource:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (111, 'menu.system.systemLog', 1, 11, 'log', '', '1', '1', 'D', '0', '0', '', '#', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemLogRemark');
REPLACE INTO "sys_menu" VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.systemInfoRemark');
REPLACE INTO "sys_menu" VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', '0', 'system', 1728641403588, 'system', 1728641403588, 'menu.system.cacheInfoRemark');
@@ -108,6 +109,10 @@ REPLACE INTO "sys_menu" VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1',
REPLACE INTO "sys_menu" VALUES (1054, 'menu.common.delete', 116, 4, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', '0', 'system', 1728641403588, 'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (1055, 'menu.common.edit', 116, 5, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', '0', 'system', 1728641403588, 'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (1056, 'menu.common.export', 116, 6, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:export', '#', '0', 'system', 1728641403588, 'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (1057, 'menu.common.query', 109, 1, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (1058, 'menu.common.add', 109, 2, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (1059, 'menu.common.edit', 109, 3, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (1060, 'menu.common.delete', 109, 4, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (2000, 'menu.neData.udmAuth', 5, 1, 'udm-auth', 'neData/udm-auth/index', '1', '1', 'M', '1', '1', 'udm#auth:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (2001, 'menu.neData.udmSub', 5, 3, 'udm-sub', 'neData/udm-sub/index', '1', '1', 'M', '1', '1', 'udm#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, '');
REPLACE INTO "sys_menu" VALUES (2002, 'menu.neData.udmVOIP', 5, 5, 'udm-voip', 'neData/udm-voip/index', '1', '0', 'M', '1', '1', 'udm#voip:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588, 'system', 1728641403588, '');

View File

@@ -2,11 +2,12 @@
-- Table structure for sys_role_menu
-- ----------------------------
CREATE TABLE IF NOT EXISTS "sys_role_menu" (
"role_id" integer(20) NOT NULL,
"menu_id" integer(20) NOT NULL,
"role_id" integer NOT NULL,
"menu_id" integer NOT NULL,
PRIMARY KEY ("role_id", "menu_id")
);
DELETE FROM "sys_role_menu" WHERE "role_id" IN (2,3,4,5);
-- ----------------------------
-- Records of sys_role_menu
-- ----------------------------
@@ -26,6 +27,7 @@ REPLACE INTO "sys_role_menu" VALUES (2, 103);
REPLACE INTO "sys_role_menu" VALUES (2, 104);
REPLACE INTO "sys_role_menu" VALUES (2, 105);
REPLACE INTO "sys_role_menu" VALUES (2, 108);
REPLACE INTO "sys_role_menu" VALUES (2, 109);
REPLACE INTO "sys_role_menu" VALUES (2, 111);
REPLACE INTO "sys_role_menu" VALUES (2, 112);
REPLACE INTO "sys_role_menu" VALUES (2, 115);
@@ -62,10 +64,8 @@ REPLACE INTO "sys_role_menu" VALUES (2, 1030);
REPLACE INTO "sys_role_menu" VALUES (2, 1032);
REPLACE INTO "sys_role_menu" VALUES (2, 1034);
REPLACE INTO "sys_role_menu" VALUES (2, 1039);
REPLACE INTO "sys_role_menu" VALUES (2, 1040);
REPLACE INTO "sys_role_menu" VALUES (2, 1041);
REPLACE INTO "sys_role_menu" VALUES (2, 1042);
REPLACE INTO "sys_role_menu" VALUES (2, 1043);
REPLACE INTO "sys_role_menu" VALUES (2, 1044);
REPLACE INTO "sys_role_menu" VALUES (2, 1045);
REPLACE INTO "sys_role_menu" VALUES (2, 1048);
@@ -77,6 +77,10 @@ REPLACE INTO "sys_role_menu" VALUES (2, 1053);
REPLACE INTO "sys_role_menu" VALUES (2, 1054);
REPLACE INTO "sys_role_menu" VALUES (2, 1055);
REPLACE INTO "sys_role_menu" VALUES (2, 1056);
REPLACE INTO "sys_role_menu" VALUES (2, 1057);
REPLACE INTO "sys_role_menu" VALUES (2, 1058);
REPLACE INTO "sys_role_menu" VALUES (2, 1059);
REPLACE INTO "sys_role_menu" VALUES (2, 1060);
REPLACE INTO "sys_role_menu" VALUES (2, 2000);
REPLACE INTO "sys_role_menu" VALUES (2, 2001);
REPLACE INTO "sys_role_menu" VALUES (2, 2002);
@@ -167,7 +171,6 @@ REPLACE INTO "sys_role_menu" VALUES (3, 65);
REPLACE INTO "sys_role_menu" VALUES (3, 66);
REPLACE INTO "sys_role_menu" VALUES (3, 108);
REPLACE INTO "sys_role_menu" VALUES (3, 112);
REPLACE INTO "sys_role_menu" VALUES (3, 115);
REPLACE INTO "sys_role_menu" VALUES (3, 500);
REPLACE INTO "sys_role_menu" VALUES (3, 501);
REPLACE INTO "sys_role_menu" VALUES (3, 1030);
@@ -175,7 +178,6 @@ REPLACE INTO "sys_role_menu" VALUES (3, 1032);
REPLACE INTO "sys_role_menu" VALUES (3, 1034);
REPLACE INTO "sys_role_menu" VALUES (3, 1039);
REPLACE INTO "sys_role_menu" VALUES (3, 1042);
REPLACE INTO "sys_role_menu" VALUES (3, 1048);
REPLACE INTO "sys_role_menu" VALUES (3, 2000);
REPLACE INTO "sys_role_menu" VALUES (3, 2001);
REPLACE INTO "sys_role_menu" VALUES (3, 2002);
@@ -188,6 +190,7 @@ REPLACE INTO "sys_role_menu" VALUES (3, 2009);
REPLACE INTO "sys_role_menu" VALUES (3, 2010);
REPLACE INTO "sys_role_menu" VALUES (3, 2011);
REPLACE INTO "sys_role_menu" VALUES (3, 2083);
REPLACE INTO "sys_role_menu" VALUES (3, 2084);
REPLACE INTO "sys_role_menu" VALUES (3, 2086);
REPLACE INTO "sys_role_menu" VALUES (3, 2087);
REPLACE INTO "sys_role_menu" VALUES (3, 2088);
@@ -199,10 +202,12 @@ REPLACE INTO "sys_role_menu" VALUES (3, 2097);
REPLACE INTO "sys_role_menu" VALUES (3, 2107);
REPLACE INTO "sys_role_menu" VALUES (3, 2108);
REPLACE INTO "sys_role_menu" VALUES (3, 2109);
REPLACE INTO "sys_role_menu" VALUES (3, 2113);
REPLACE INTO "sys_role_menu" VALUES (3, 2112);
REPLACE INTO "sys_role_menu" VALUES (3, 2114);
REPLACE INTO "sys_role_menu" VALUES (3, 2115);
REPLACE INTO "sys_role_menu" VALUES (3, 2116);
REPLACE INTO "sys_role_menu" VALUES (3, 2118);
REPLACE INTO "sys_role_menu" VALUES (3, 2122);
REPLACE INTO "sys_role_menu" VALUES (3, 2123);
REPLACE INTO "sys_role_menu" VALUES (3, 2126);
REPLACE INTO "sys_role_menu" VALUES (3, 2128);
@@ -223,11 +228,10 @@ REPLACE INTO "sys_role_menu" VALUES (3, 2149);
REPLACE INTO "sys_role_menu" VALUES (3, 2151);
REPLACE INTO "sys_role_menu" VALUES (3, 2152);
REPLACE INTO "sys_role_menu" VALUES (3, 2153);
REPLACE INTO "sys_role_menu" VALUES (3, 2154);
REPLACE INTO "sys_role_menu" VALUES (3, 2155);
REPLACE INTO "sys_role_menu" VALUES (3, 2156);
REPLACE INTO "sys_role_menu" VALUES (3, 2157);
REPLACE INTO "sys_role_menu" VALUES (3, 2158);
REPLACE INTO "sys_role_menu" VALUES (3, 2162);
REPLACE INTO "sys_role_menu" VALUES (3, 2163);
REPLACE INTO "sys_role_menu" VALUES (3, 2165);
REPLACE INTO "sys_role_menu" VALUES (3, 2166);
REPLACE INTO "sys_role_menu" VALUES (3, 2167);
@@ -237,9 +241,6 @@ REPLACE INTO "sys_role_menu" VALUES (3, 20000);
REPLACE INTO "sys_role_menu" VALUES (4, 1);
REPLACE INTO "sys_role_menu" VALUES (4, 4);
REPLACE INTO "sys_role_menu" VALUES (4, 60);
REPLACE INTO "sys_role_menu" VALUES (4, 65);
REPLACE INTO "sys_role_menu" VALUES (4, 66);
REPLACE INTO "sys_role_menu" VALUES (4, 112);
REPLACE INTO "sys_role_menu" VALUES (4, 115);
REPLACE INTO "sys_role_menu" VALUES (4, 500);
@@ -249,17 +250,18 @@ REPLACE INTO "sys_role_menu" VALUES (4, 1041);
REPLACE INTO "sys_role_menu" VALUES (4, 1042);
REPLACE INTO "sys_role_menu" VALUES (4, 1044);
REPLACE INTO "sys_role_menu" VALUES (4, 1048);
REPLACE INTO "sys_role_menu" VALUES (4, 2083);
REPLACE INTO "sys_role_menu" VALUES (4, 2086);
REPLACE INTO "sys_role_menu" VALUES (4, 2087);
REPLACE INTO "sys_role_menu" VALUES (4, 2088);
REPLACE INTO "sys_role_menu" VALUES (4, 2089);
REPLACE INTO "sys_role_menu" VALUES (4, 2091);
REPLACE INTO "sys_role_menu" VALUES (4, 2092);
REPLACE INTO "sys_role_menu" VALUES (4, 2094);
REPLACE INTO "sys_role_menu" VALUES (4, 2097);
REPLACE INTO "sys_role_menu" VALUES (4, 2112);
REPLACE INTO "sys_role_menu" VALUES (4, 2113);
REPLACE INTO "sys_role_menu" VALUES (4, 2114);
REPLACE INTO "sys_role_menu" VALUES (4, 2115);
REPLACE INTO "sys_role_menu" VALUES (4, 2116);
REPLACE INTO "sys_role_menu" VALUES (4, 2123);
REPLACE INTO "sys_role_menu" VALUES (4, 2126);
REPLACE INTO "sys_role_menu" VALUES (4, 2128);
REPLACE INTO "sys_role_menu" VALUES (4, 2129);
@@ -273,11 +275,7 @@ REPLACE INTO "sys_role_menu" VALUES (4, 2141);
REPLACE INTO "sys_role_menu" VALUES (4, 2147);
REPLACE INTO "sys_role_menu" VALUES (4, 2148);
REPLACE INTO "sys_role_menu" VALUES (4, 2149);
REPLACE INTO "sys_role_menu" VALUES (4, 2151);
REPLACE INTO "sys_role_menu" VALUES (4, 2152);
REPLACE INTO "sys_role_menu" VALUES (4, 2153);
REPLACE INTO "sys_role_menu" VALUES (4, 2157);
REPLACE INTO "sys_role_menu" VALUES (4, 2163);
REPLACE INTO "sys_role_menu" VALUES (4, 2165);
REPLACE INTO "sys_role_menu" VALUES (4, 2166);
REPLACE INTO "sys_role_menu" VALUES (4, 2167);
@@ -289,6 +287,13 @@ REPLACE INTO "sys_role_menu" VALUES (5, 4);
REPLACE INTO "sys_role_menu" VALUES (5, 112);
REPLACE INTO "sys_role_menu" VALUES (5, 2087);
REPLACE INTO "sys_role_menu" VALUES (5, 2115);
REPLACE INTO "sys_role_menu" VALUES (5, 2126);
REPLACE INTO "sys_role_menu" VALUES (5, 2128);
REPLACE INTO "sys_role_menu" VALUES (5, 2130);
REPLACE INTO "sys_role_menu" VALUES (5, 2131);
REPLACE INTO "sys_role_menu" VALUES (5, 2132);
REPLACE INTO "sys_role_menu" VALUES (5, 2165);
REPLACE INTO "sys_role_menu" VALUES (5, 2166);
REPLACE INTO "sys_role_menu" VALUES (5, 2167);
REPLACE INTO "sys_role_menu" VALUES (5, 2168);
REPLACE INTO "sys_role_menu" VALUES (5, 2169);

View File

@@ -0,0 +1,46 @@
-- ----------------------------
-- Table structure for sys_user
-- ----------------------------
ALTER TABLE "sys_user" RENAME TO "sys_user_old";
CREATE TABLE "sys_user" (
"user_id" integer NOT NULL,
"dept_id" integer,
"user_name" text(36) NOT NULL,
"nick_name" text(36) NOT NULL,
"email" text(64),
"phone" text(32),
"sex" text(1),
"avatar" text(255),
"password" text(128),
"user_type" text(20),
"user_source" text(32),
"status_flag" text(1),
"del_flag" text(1),
"password_update_time" integer,
"login_count" integer,
"login_ip" text(128),
"login_time" integer,
"create_by" text(64),
"create_time" integer,
"update_by" text(64),
"update_time" integer,
"remark" text(200),
PRIMARY KEY ("user_id")
);
-- ----------------------------
-- Records of sys_user
-- ----------------------------
INSERT INTO "sys_user" (
"user_id", "dept_id", "user_name", "nick_name", "email", "phone", "sex", "avatar", "password", "status_flag", "del_flag", "password_update_time", "login_count", "login_ip", "login_time", "create_by", "create_time", "update_by", "update_time", "remark")
SELECT
"user_id", "dept_id", "user_name", "nick_name", "email", "phone", "sex", "avatar", "password", "status_flag", "del_flag", "password_update_time", "login_count", "login_ip", "login_time", "create_by", "create_time", "update_by", "update_time", "remark"
FROM "sys_user_old";
-- UPDATE "user_type", "user_source"
UPDATE sys_user SET
user_type = COALESCE((SELECT user_type FROM sys_user_old WHERE sys_user_old.user_id = sys_user.user_id), 'Sytem'),
user_source = COALESCE((SELECT user_source FROM sys_user_old WHERE sys_user_old.user_id = sys_user.user_id), '#')
WHERE EXISTS (SELECT 1 FROM sys_user_old WHERE sys_user_old.user_id = sys_user.user_id);
DROP TABLE IF EXISTS "sys_user_old";

View File

@@ -1,22 +1,3 @@
/*
Navicat Premium Data Transfer
Source Server : local_mariadb
Source Server Type : MariaDB
Source Server Version : 100338 (10.3.38-MariaDB)
Source Host : localhost:33066
Source Schema : omc_db
Target Server Type : MariaDB
Target Server Version : 100338 (10.3.38-MariaDB)
File Encoding : 65001
Date: 14/05/2024 11:55:53
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for mml_command
-- ----------------------------
@@ -31,9 +12,8 @@ CREATE TABLE `mml_command` (
`mml_display` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`param_json` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NULL DEFAULT NULL,
`status` enum('Active','Inactive') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'Active' COMMENT '激活: Active 未激活: Inactive',
PRIMARY KEY (`id`) USING BTREE,
INDEX `id`(`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 1626 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;
-- ----------------------------
-- Records of mml_command
@@ -71,5 +51,3 @@ INSERT INTO `mml_command` VALUES (1622, 'OMC', 'logManagement', 'Log Management'
INSERT INTO `mml_command` VALUES (1623, 'OMC', 'logManagement', 'Log Management', 'lst', 'eventlog', 'List NE Event Log', '[{\"alias\":\"ne_type\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"NE type\",\"filter\":\"\",\"loc\":\"true\",\"name\":\"netype\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"ne_id\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"NE ID\",\"filter\":\"\",\"loc\":\"true\",\"name\":\"neid\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"log_time\\u003e\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Log time(\\u003e=)\",\"filter\":\"\",\"name\":\"starttime\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"log_time\\u003c\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Log time(\\u003c=)\",\"filter\":\"\",\"name\":\"endtime\",\"optional\":\"true\",\"type\":\"string\"}]', 'Active');
INSERT INTO `mml_command` VALUES (1624, 'OMC', 'mmlManagement', 'MML Management', 'lst', 'mmlcmd', 'List MML Command', '[{\"alias\":\"ne_type\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Category\",\"filter\":\"\",\"name\":\"category\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"operation\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Operation\",\"filter\":\"\",\"name\":\"operation\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"object\",\"apostr\":\"true\",\"comment\":\"\",\"display\":\"Object\",\"filter\":\"\",\"name\":\"object\",\"optional\":\"true\",\"type\":\"string\"}]', 'Active');
INSERT INTO `mml_command` VALUES (1625, 'OMC', 'systemManagement', 'System Management', 'dsp', 'sysinfo', 'Display NE System Information', '[{\"alias\":\"neType\",\"apostr\":\"false\",\"comment\":\"\",\"display\":\"NE type\",\"filter\":\"\",\"name\":\"netype\",\"optional\":\"true\",\"type\":\"string\"},{\"alias\":\"neId\",\"comment\":\"\",\"display\":\"NE ID\",\"filter\":\"\",\"name\":\"neid\",\"optional\":\"true\",\"type\":\"string\"}]', 'Active');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -1,38 +1,16 @@
/*
Navicat Premium Data Transfer
Source Server : root@192.168.2.242
Source Server Type : MariaDB
Source Server Version : 100622 (10.6.22-MariaDB-0ubuntu0.22.04.1)
Source Host : 192.168.2.242:33066
Source Schema : omc_db
Target Server Type : MariaDB
Target Server Version : 100622 (10.6.22-MariaDB-0ubuntu0.22.04.1)
File Encoding : 65001
Date: 01/08/2025 10:07:00
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for cbc_message
-- ----------------------------
DROP TABLE IF EXISTS `cbc_message`;
CREATE TABLE `cbc_message` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`message_json` varchar(10240) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`status` enum('ACTIVE','INACTIVE') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'INACTIVE',
`detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`created_at` bigint(20) NULL DEFAULT NULL,
`updated_at` bigint(20) NULL DEFAULT NULL,
CREATE TABLE `cbc_message` (
`id` bigint NOT NULL AUTO_INCREMENT,
`ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`message_json` varchar(10240) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'INACTIVE' COMMENT 'ACTIVE/INACTIVE',
`detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`created_at` bigint DEFAULT NULL,
`updated_at` bigint DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `id`(`id`) USING BTREE,
INDEX `idx_ne_time`(`ne_type`, `ne_id`, `created_at`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 64 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'CDR事件_MF' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
KEY `idx_cbcm_ne_time` (`ne_type`,`ne_id`,`created_at`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='CDR事件_MF';

View File

@@ -195,6 +195,10 @@ INSERT INTO `sys_dict_data` VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_sip
INSERT INTO `sys_dict_data` VALUES (167, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO `sys_dict_data` VALUES (168, 'trace_interfaces', 'dictData.trace_interfaces.14', 'N14', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO `sys_dict_data` VALUES (169, 'trace_interfaces', 'dictData.trace_interfaces.5', 'N5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO `sys_dict_data` VALUES (170, 'sys_user_type', 'dictData.sys_user_type.system', 'System', 1, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO `sys_dict_data` VALUES (171, 'sys_user_type', 'dictData.sys_user_type.ldap', 'LDAP', 2, '', 'lime', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO `sys_dict_data` VALUES (172, 'sys_user_type', 'dictData.sys_user_type.smtp', 'SMTP', 3, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO `sys_dict_data` VALUES (173, 'sys_user_type', 'dictData.sys_user_type.oauth2', 'OAuth2', 4, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -31,6 +31,7 @@ INSERT INTO `sys_dict_type` VALUES (5, 'dictType.sys_job_group', 'sys_job_group'
INSERT INTO `sys_dict_type` VALUES (6, 'dictType.sys_yes_no', 'sys_yes_no', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no_remark');
INSERT INTO `sys_dict_type` VALUES (9, 'dictType.sys_oper_type', 'sys_oper_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type_remark');
INSERT INTO `sys_dict_type` VALUES (10, 'dictType.sys_common_status', 'sys_common_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status_remark');
INSERT INTO `sys_dict_type` VALUES (11, 'dictType.sys_user_type', 'sys_user_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
INSERT INTO `sys_dict_type` VALUES (50, 'dictType.trace_type', 'trace_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type_remark');
INSERT INTO `sys_dict_type` VALUES (51, 'dictType.alarm_status', 'alarm_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status_remark');
INSERT INTO `sys_dict_type` VALUES (52, 'dictType.ne_version_status', 'ne_version_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status_remark');

View File

@@ -775,6 +775,14 @@ INSERT INTO `sys_i18n` VALUES (757, 'dictData.trace_interfaces.5', 'N5', 'N5');
INSERT INTO `sys_i18n` VALUES (758, "alarm.export.alarmCode", "告警编码", "Alarm Code");
INSERT INTO `sys_i18n` VALUES (759, "config.sys.user.fristPasswdChangeRemark", "关闭改为false 开启改为true, 建议同时设置密码有效期", "Off to false On to true, it is recommended to set the password expiration date at the same time.");
INSERT INTO `sys_i18n` VALUES (760, "menu.perf.kpiIMSOverview", "语音数据概览", "Voice Data Overview");
INSERT INTO `sys_i18n` VALUES (761, "dictType.sys_user_type", "用户类型", "User Type");
INSERT INTO `sys_i18n` VALUES (762, "dictData.sys_user_type.system", "系统", "System");
INSERT INTO `sys_i18n` VALUES (763, "dictData.sys_user_type.ldap", "LDAP", "LDAP");
INSERT INTO `sys_i18n` VALUES (764, "dictData.sys_user_type.smtp", "SMTP", "SMTP");
INSERT INTO `sys_i18n` VALUES (765, "dictData.sys_user_type.oauth2", "OAuth2", "OAuth2");
INSERT INTO `sys_i18n` VALUES (766, "user.export.userType", "用户类型", "User Type");
INSERT INTO `sys_i18n` VALUES (767, "menu.system.loginSource", "第三方登录认证", "Third Party Login Source");
INSERT INTO `sys_i18n` VALUES (768, "log.operate.title.sysLoginSource", "认证源", "Login Source");
INSERT INTO `sys_i18n` VALUES (2000, 'menu.psap.agent', '座席', 'Agent');
INSERT INTO `sys_i18n` VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information');

View File

@@ -0,0 +1,24 @@
--
-- Table structure for table `sys_login_source`
--
DROP TABLE IF EXISTS `sys_login_source`;
CREATE TABLE `sys_login_source` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UID 16位长度字符串',
`type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '认证类型 LDAP SMTP OAuth2',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '认证名称',
`icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '图标',
`active_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '激活标记0未激活 1激活',
`sync_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '同步标记0未同步 1同步',
`config` text COLLATE utf8mb4_general_ci COMMENT '认证配置',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` bigint NULL DEFAULT 0 COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` bigint NULL DEFAULT 0 COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_ls_type_name` (`type`,`name`) USING BTREE COMMENT '认证类型_认证名称'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统_认证源表';
-- Dump completed on 2025-08-05 16:20:56

View File

@@ -50,6 +50,7 @@ INSERT INTO `sys_menu` VALUES (105, 'menu.security.post', 2113, 6, 'post', 'syst
INSERT INTO `sys_menu` VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.dictTypeRemark');
INSERT INTO `sys_menu` VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.dictDataRemark');
INSERT INTO `sys_menu` VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.paramSetRemark');
INSERT INTO `sys_menu` VALUES (109, 'menu.system.loginSource', 2113, 12, 'login-source', 'system/login-source/index', '1', '1', 'M', '1', '1', 'system:loginSource:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (111, 'menu.system.systemLog', 1, 11, 'log', '', '1', '1', 'D', '0', '0', '', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemLogRemark');
INSERT INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemInfoRemark');
INSERT INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.cacheInfoRemark');
@@ -112,6 +113,10 @@ INSERT INTO `sys_menu` VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1', '
INSERT INTO `sys_menu` VALUES (1054, 'menu.common.delete', 116, 4, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (1055, 'menu.common.edit', 116, 5, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (1057, 'menu.common.query', 109, 1, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (1058, 'menu.common.add', 109, 2, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (1059, 'menu.common.edit', 109, 3, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (1060, 'menu.common.delete', 109, 4, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (2000, 'menu.neData.udmAuth', 5, 1, 'udm-auth', 'neData/udm-auth/index', '1', '1', 'M', '1', '1', 'udm#auth:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (2001, 'menu.neData.udmSub', 5, 3, 'udm-sub', 'neData/udm-sub/index', '1', '1', 'M', '1', '1', 'udm#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');
INSERT INTO `sys_menu` VALUES (2002, 'menu.neData.udmVOIP', 5, 5, 'udm-voip', 'neData/udm-voip/index', '1', '0', 'M', '1', '1', 'udm#voip:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');

View File

@@ -1,6 +1,3 @@
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
@@ -14,9 +11,6 @@ CREATE TABLE `sys_role_menu` (
--
-- Dumping data for table `sys_role_menu`
--
LOCK TABLES `sys_role_menu` WRITE;
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 5);
@@ -33,6 +27,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 103);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 104);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 105);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 108);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 109);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 111);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 115);
@@ -69,10 +64,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1030);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1032);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1034);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1039);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1040);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1041);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1043);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1044);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1045);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1048);
@@ -84,6 +77,10 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1053);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1054);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1055);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1056);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1057);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1058);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1059);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1060);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2000);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2001);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2002);
@@ -91,8 +88,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2003);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2004);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2005);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2007);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2008);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2011);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2083);
@@ -174,7 +171,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 108);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 500);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 501);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1030);
@@ -182,7 +178,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1032);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1034);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1039);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2000);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2001);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2002);
@@ -195,6 +190,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2011);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2083);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2084);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2086);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2088);
@@ -206,10 +202,12 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2108);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2109);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2112);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2118);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2122);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2123);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2128);
@@ -230,11 +228,10 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2149);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2151);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2154);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2155);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2156);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2158);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2162);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2163);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2167);
@@ -244,9 +241,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 20000);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 60);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 500);
@@ -256,17 +250,18 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1041);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1044);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1048);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2083);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2086);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2088);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2089);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2091);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2092);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2094);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2112);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2123);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2128);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2129);
@@ -280,11 +275,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2141);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2147);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2148);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2149);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2151);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2163);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2167);
@@ -296,10 +287,15 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (5, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2128);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2130);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2131);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2132);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2165);
UNLOCK TABLES;
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2167);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2168);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2169);
-- Dump completed on 2025-02-14 15:26:56

View File

@@ -1,4 +1,3 @@
-- MariaDB dump 10.19 Distrib 10.6.16-MariaDB, for debian-linux-gnu (x86_64)
--
-- Table structure for table `sys_user`
--
@@ -14,6 +13,8 @@ CREATE TABLE `sys_user` (
`sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别0未选择 1男 2女',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址',
`password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码',
`user_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'System' COMMENT '用户类型System系统用户',
`user_source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '#' COMMENT '用户来源UID#系统)',
`status_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '账号状态0停用 1正常',
`del_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标记0存在 1删除',
`password_update_time` bigint NULL DEFAULT 0 COMMENT '密码更新时间',
@@ -30,15 +31,10 @@ CREATE TABLE `sys_user` (
--
-- Dumping data for table `sys_user`
--
LOCK TABLES `sys_user` WRITE;
/*!40000 ALTER TABLE `sys_user` DISABLE KEYS */;
INSERT INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
UNLOCK TABLES;
--
INSERT INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
-- Dump completed on 2025-02-14 15:26:56

View File

@@ -1,37 +1,15 @@
/*
Navicat Premium Data Transfer
Source Server : root@192.168.2.242
Source Server Type : MariaDB
Source Server Version : 100622 (10.6.22-MariaDB-0ubuntu0.22.04.1)
Source Host : 192.168.2.242:33066
Source Schema : omc_db
Target Server Type : MariaDB
Target Server Version : 100622 (10.6.22-MariaDB-0ubuntu0.22.04.1)
File Encoding : 65001
Date: 01/08/2025 10:07:00
*/
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for cbc_message
-- ----------------------------
CREATE TABLE IF NOT EXISTS `cbc_message` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`message_json` varchar(10240) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`status` enum('ACTIVE','INACTIVE') CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'INACTIVE',
`detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
`created_at` bigint(20) NULL DEFAULT NULL,
`updated_at` bigint(20) NULL DEFAULT NULL,
CREATE TABLE IF NOT EXISTS `cbc_message` (
`id` bigint NOT NULL AUTO_INCREMENT,
`ne_type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`ne_id` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`message_json` varchar(10240) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`status` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'INACTIVE' COMMENT 'ACTIVE/INACTIVE',
`detail` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT NULL,
`created_at` bigint DEFAULT NULL,
`updated_at` bigint DEFAULT NULL,
PRIMARY KEY (`id`) USING BTREE,
INDEX `id`(`id`) USING BTREE,
INDEX `idx_ne_time`(`ne_type`, `ne_id`, `created_at`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 64 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = 'CDR事件_MF' ROW_FORMAT = Dynamic;
SET FOREIGN_KEY_CHECKS = 1;
KEY `idx_cbcm_ne_time` (`ne_type`,`ne_id`,`created_at`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='CDR事件_MF';

View File

@@ -199,6 +199,10 @@ REPLACE INTO `sys_dict_data` VALUES (166, 'cdr_sip_code_cause', 'dictData.cdr_si
REPLACE INTO `sys_dict_data` VALUES (167, 'cdr_sip_code_cause', 'dictData.cdr_sip_code_cause.606', '606', 22, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO `sys_dict_data` VALUES (168, 'trace_interfaces', 'dictData.trace_interfaces.14', 'N14', 14, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO `sys_dict_data` VALUES (169, 'trace_interfaces', 'dictData.trace_interfaces.5', 'N5', 5, '', '', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO `sys_dict_data` VALUES (170, 'sys_user_type', 'dictData.sys_user_type.system', 'System', 1, '', 'default', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO `sys_dict_data` VALUES (171, 'sys_user_type', 'dictData.sys_user_type.ldap', 'LDAP', 2, '', 'lime', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO `sys_dict_data` VALUES (172, 'sys_user_type', 'dictData.sys_user_type.smtp', 'SMTP', 3, '', 'magenta', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO `sys_dict_data` VALUES (173, 'sys_user_type', 'dictData.sys_user_type.oauth2', 'OAuth2', 4, '', 'gold', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
SET FOREIGN_KEY_CHECKS = 1;

View File

@@ -31,6 +31,7 @@ REPLACE INTO `sys_dict_type` VALUES (5, 'dictType.sys_job_group', 'sys_job_group
REPLACE INTO `sys_dict_type` VALUES (6, 'dictType.sys_yes_no', 'sys_yes_no', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_yes_no_remark');
REPLACE INTO `sys_dict_type` VALUES (9, 'dictType.sys_oper_type', 'sys_oper_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_oper_type_remark');
REPLACE INTO `sys_dict_type` VALUES (10, 'dictType.sys_common_status', 'sys_common_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.sys_common_status_remark');
REPLACE INTO `sys_dict_type` VALUES (11, 'dictType.sys_user_type', 'sys_user_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, '');
REPLACE INTO `sys_dict_type` VALUES (50, 'dictType.trace_type', 'trace_type', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.trace_type_remark');
REPLACE INTO `sys_dict_type` VALUES (51, 'dictType.alarm_status', 'alarm_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.alarm_status_remark');
REPLACE INTO `sys_dict_type` VALUES (52, 'dictType.ne_version_status', 'ne_version_status', '1', '0', 'system', 1699348237468, 'system', 1699348237468, 'dictType.ne_version_status_remark');

View File

@@ -772,6 +772,14 @@ REPLACE INTO `sys_i18n` VALUES (757, 'dictData.trace_interfaces.5', 'N5', 'N5');
REPLACE INTO `sys_i18n` VALUES (758, "alarm.export.alarmCode", "告警编码", "Alarm Code");
REPLACE INTO `sys_i18n` VALUES (759, "config.sys.user.fristPasswdChangeRemark", "关闭改为false 开启改为true, 建议同时设置密码有效期", "Off to false On to true, it is recommended to set the password expiration date at the same time.");
REPLACE INTO `sys_i18n` VALUES (760, "menu.perf.kpiIMSOverview", "语音数据概览", "Voice Data Overview");
REPLACE INTO `sys_i18n` VALUES (761, "dictType.sys_user_type", "用户类型", "User Type");
REPLACE INTO `sys_i18n` VALUES (762, "dictData.sys_user_type.system", "系统", "System");
REPLACE INTO `sys_i18n` VALUES (763, "dictData.sys_user_type.ldap", "LDAP", "LDAP");
REPLACE INTO `sys_i18n` VALUES (764, "dictData.sys_user_type.smtp", "SMTP", "SMTP");
REPLACE INTO `sys_i18n` VALUES (765, "dictData.sys_user_type.oauth2", "OAuth2", "OAuth2");
REPLACE INTO `sys_i18n` VALUES (766, "user.export.userType", "用户类型", "User Type");
REPLACE INTO `sys_i18n` VALUES (767, "menu.system.loginSource", "第三方登录认证", "Third Party Login Source");
REPLACE INTO `sys_i18n` VALUES (768, "log.operate.title.sysLoginSource", "认证源", "Login Source");
REPLACE INTO `sys_i18n` VALUES (2000, 'menu.psap.agent', '座席', 'Agent');
REPLACE INTO `sys_i18n` VALUES (2001, 'menu.psap.agent.callings', '并行话务', 'Calling Information');

View File

@@ -0,0 +1,23 @@
--
-- Table structure for table `sys_login_source`
--
CREATE TABLE IF NOT EXISTS `sys_login_source` (
`id` bigint NOT NULL AUTO_INCREMENT COMMENT 'ID',
`uid` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT 'UID 16位长度字符串',
`type` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '认证类型 LDAP SMTP OAuth2',
`name` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '认证名称',
`icon` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '' COMMENT '图标',
`active_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '激活标记0未激活 1激活',
`sync_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '0' COMMENT '同步标记0未同步 1同步',
`config` text COLLATE utf8mb4_general_ci COMMENT '认证配置',
`create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者',
`create_time` bigint NULL DEFAULT 0 COMMENT '创建时间',
`update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者',
`update_time` bigint NULL DEFAULT 0 COMMENT '更新时间',
`remark` varchar(500) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '备注',
PRIMARY KEY (`id`) USING BTREE,
KEY `idx_ls_type_name` (`type`,`name`) USING BTREE COMMENT '认证类型_认证名称'
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_general_ci ROW_FORMAT=DYNAMIC COMMENT='系统_认证源表';
-- Dump completed on 2025-08-05 16:20:56

View File

@@ -72,6 +72,7 @@ REPLACE INTO `sys_menu` VALUES (105, 'menu.security.post', 2113, 6, 'post', 'sys
REPLACE INTO `sys_menu` VALUES (106, 'menu.system.dictType', 1, 30, 'dict', 'system/dict/index', '1', '1', 'M', '1', '1', 'system:dict:list', 'icon-tubiaoku', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.dictTypeRemark');
REPLACE INTO `sys_menu` VALUES (107, 'menu.system.dictData', 1, 31, 'dict/inline/data/:dictId', 'system/dict/data', '1', '1', 'M', '0', '1', 'system:dict:data', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.dictDataRemark');
REPLACE INTO `sys_menu` VALUES (108, 'menu.system.paramSet', 1, 59, 'config', 'system/config/index', '1', '1', 'M', '1', '1', 'system:config:list', 'icon-gongnengjieshao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.paramSetRemark');
REPLACE INTO `sys_menu` VALUES (109, 'menu.system.loginSource', 2113, 12, 'login-source', 'system/login-source/index', '1', '1', 'M', '1', '1', 'system:loginSource:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (111, 'menu.system.systemLog', 1, 11, 'log', '', '1', '1', 'D', '0', '0', '', '#', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemLogRemark');
REPLACE INTO `sys_menu` VALUES (112, 'menu.system.systemInfo', 1, 5, 'system-info', 'monitor/system/info', '1', '1', 'M', '1', '1', 'monitor:system:info', 'icon-fuzhidaima', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.systemInfoRemark');
REPLACE INTO `sys_menu` VALUES (113, 'menu.system.cacheInfo', 1, 8, 'cache-info', 'monitor/cache/info', '1', '1', 'M', '1', '1', 'monitor:cache:info', 'icon-gongnengjieshao', '0', 'system', 1728641403588,'system', 1728641403588, 'menu.system.cacheInfoRemark');
@@ -134,6 +135,10 @@ REPLACE INTO `sys_menu` VALUES (1053, 'menu.common.edit', 116, 3, '#', '', '1',
REPLACE INTO `sys_menu` VALUES (1054, 'menu.common.delete', 116, 4, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (1055, 'menu.common.edit', 116, 5, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:changeStatus', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (1056, 'menu.common.export', 116, 6, '#', '', '1', '1', 'B', '1', '1', 'monitor:job:export', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (1057, 'menu.common.query', 109, 1, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:query', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (1058, 'menu.common.add', 109, 2, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:add', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (1059, 'menu.common.edit', 109, 3, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:edit', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (1060, 'menu.common.delete', 109, 4, '#', '', '1', '1', 'B', '1', '1', 'system:loginSource:remove', '#', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (2000, 'menu.neData.udmAuth', 5, 1, 'udm-auth', 'neData/udm-auth/index', '1', '1', 'M', '1', '1', 'udm#auth:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (2001, 'menu.neData.udmSub', 5, 3, 'udm-sub', 'neData/udm-sub/index', '1', '1', 'M', '1', '1', 'udm#sub:index', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');
REPLACE INTO `sys_menu` VALUES (2002, 'menu.neData.udmVOIP', 5, 5, 'udm-voip', 'neData/udm-voip/index', '1', '0', 'M', '1', '1', 'udm#voip:list', 'icon-xiangmuchengyuan', '0', 'system', 1728641403588,'system', 1728641403588, '');

View File

@@ -1,6 +1,3 @@
SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;
-- ----------------------------
-- Table structure for sys_role_menu
-- ----------------------------
@@ -10,12 +7,10 @@ CREATE TABLE IF NOT EXISTS `sys_role_menu` (
PRIMARY KEY (`role_id`, `menu_id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci COMMENT = '系统_角色和菜单关联表' ROW_FORMAT = Dynamic;
DELETE FROM `sys_role_menu` WHERE `role_id` IN (2,3,4,5);
--
-- Dumping data for table `sys_role_menu`
--
LOCK TABLES `sys_role_menu` WRITE;
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 5);
@@ -32,6 +27,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 103);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 104);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 105);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 108);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 109);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 111);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 115);
@@ -68,10 +64,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1030);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1032);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1034);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1039);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1040);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1041);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1043);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1044);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1045);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1048);
@@ -83,6 +77,10 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1053);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1054);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1055);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1056);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1057);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1058);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1059);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 1060);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2000);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2001);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2002);
@@ -90,8 +88,8 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2003);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2004);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2005);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2007);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2008);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2010);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2011);
INSERT IGNORE INTO `sys_role_menu` VALUES (2, 2083);
@@ -173,7 +171,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 108);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 500);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 501);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1030);
@@ -181,7 +178,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1032);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1034);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1039);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 1048);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2000);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2001);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2002);
@@ -194,6 +190,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2009);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2010);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2011);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2083);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2084);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2086);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2088);
@@ -205,10 +202,12 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2107);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2108);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2109);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2112);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2118);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2122);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2123);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2128);
@@ -229,11 +228,10 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2149);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2151);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2152);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2153);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2154);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2155);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2156);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2158);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2162);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2163);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (3, 2167);
@@ -243,9 +241,6 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (3, 20000);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 60);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 65);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 66);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 115);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 500);
@@ -255,17 +250,18 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1041);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1042);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1044);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 1048);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2083);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2086);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2088);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2089);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2091);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2092);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2094);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2097);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2112);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2113);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2114);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2116);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2123);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2128);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2129);
@@ -279,11 +275,7 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2141);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2147);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2148);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2149);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2151);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2152);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2153);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2157);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2163);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2165);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (4, 2167);
@@ -295,10 +287,15 @@ INSERT IGNORE INTO `sys_role_menu` VALUES (5, 4);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 112);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2087);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2115);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2126);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2128);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2130);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2131);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2132);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2165);
UNLOCK TABLES;
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2166);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2167);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2168);
INSERT IGNORE INTO `sys_role_menu` VALUES (5, 2169);
-- Dump completed on 2025-02-14 15:26:56

View File

@@ -1,6 +1,7 @@
--
-- Table structure for table `sys_user`
--
CREATE TABLE IF NOT EXISTS `sys_user` (
`user_id` bigint NOT NULL AUTO_INCREMENT COMMENT '用户ID',
`dept_id` bigint NULL DEFAULT 0 COMMENT '部门ID',
@@ -11,6 +12,8 @@ CREATE TABLE IF NOT EXISTS `sys_user` (
`sex` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '用户性别0未选择 1男 2女',
`avatar` varchar(255) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '头像地址',
`password` varchar(128) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '密码',
`user_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT 'System' COMMENT '用户类型System系统用户',
`user_source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci DEFAULT '#' COMMENT '用户来源UID (系统#)',
`status_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '账号状态0停用 1正常',
`del_flag` varchar(1) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '0' COMMENT '删除标记0存在 1删除',
`password_update_time` bigint NULL DEFAULT 0 COMMENT '密码更新时间',
@@ -28,10 +31,6 @@ CREATE TABLE IF NOT EXISTS `sys_user` (
-- ----------------------------
-- COLUMN for sys_user
-- ----------------------------
ALTER TABLE `sys_user` DROP COLUMN `user_type`;
ALTER TABLE `sys_user` DROP COLUMN `phonenumber`;
ALTER TABLE `sys_user` DROP COLUMN `status`;
ALTER TABLE `sys_user` DROP COLUMN `login_date`;
ALTER TABLE `sys_user` MODIFY COLUMN `user_name` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户账号' AFTER `dept_id`;
ALTER TABLE `sys_user` MODIFY COLUMN `nick_name` varchar(36) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NOT NULL COMMENT '用户昵称' AFTER `user_name`;
ALTER TABLE `sys_user` ADD COLUMN `phone` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '手机号码' AFTER `email`;
@@ -45,15 +44,18 @@ ALTER TABLE `sys_user` ADD COLUMN `login_time` bigint(20) NULL DEFAULT 0 COMMENT
ALTER TABLE `sys_user` MODIFY COLUMN `create_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '创建者' AFTER `login_time`;
ALTER TABLE `sys_user` MODIFY COLUMN `update_by` varchar(64) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '' COMMENT '更新者' AFTER `create_time`;
ALTER TABLE `sys_user` MODIFY COLUMN `remark` varchar(200) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL COMMENT '备注' AFTER `update_time`;
ALTER TABLE `sys_user` ADD COLUMN `user_type` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT 'System' COMMENT '用户类型System系统用户' AFTER `password`;
ALTER TABLE `sys_user` ADD COLUMN `user_source` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT '#' COMMENT '用户来源UID (系统#)' AFTER `user_type`;
ALTER TABLE `sys_user` COMMENT = '系统_用户信息表';
-- ----------------------------
-- Data for sys_user
-- ----------------------------
INSERT IGNORE INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT IGNORE INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT IGNORE INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT IGNORE INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
UPDATE `sys_user` SET `status_flag` = '1' WHERE `user_id` in (1,2,3,4);
INSERT IGNORE INTO `sys_user` VALUES (1, 100, 'supervisor', 'supervisor', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT IGNORE INTO `sys_user` VALUES (2, 100, 'admin', 'admin', '', '', '0', '', '$2a$10$QgIcp6yuOEGrEU0TNU12K.uQRLbcufesEU7hiRYlRSSdUO7OAkoTq', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT IGNORE INTO `sys_user` VALUES (3, 100, 'manager', 'manager', '', '', '0', '', '$2a$10$RND3fUw9Ai.WcggYSI57tu.u3OIlktdPxFzlWkmiHC1paV038t0I2', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
INSERT IGNORE INTO `sys_user` VALUES (4, 100, 'monitor', 'monitor', '', '', '0', '', '$2a$10$t3zpKQ0olECotFyI1yO43.tCoS0EXoSRBDcqwl09xvrsmn14qFHHy', 'System', '#', '1', '0', 0, 0, '127.0.0.1', 0, 'system', 0, '', 0, '');
UPDATE `sys_user` SET `status_flag` = '1', `user_type` = 'System', `user_source` = '#' WHERE `user_id` in (1,2,3,4);
-- Dump completed on 2025-02-14 15:26:56

View File

@@ -23,38 +23,84 @@ func Setup(router *gin.Engine) {
)
// 账号身份操作
account := controller.NewAccount
accountGroup := router.Group("/auth")
{
router.POST("/auth/login",
accountGroup.POST("/login",
middleware.RateLimit(middleware.LimitOption{
Time: 180,
Count: 15,
Type: middleware.LIMIT_IP,
}),
controller.NewAccount.Login,
account.Login,
)
router.POST("/auth/logout",
accountGroup.POST("/logout",
middleware.RateLimit(middleware.LimitOption{
Time: 120,
Count: 15,
Type: middleware.LIMIT_IP,
}),
controller.NewAccount.Logout,
account.Logout,
)
router.POST("/auth/refresh-token",
accountGroup.POST("/refresh-token",
middleware.RateLimit(middleware.LimitOption{
Time: 60,
Count: 5,
Type: middleware.LIMIT_IP,
}),
controller.NewAccount.RefreshToken,
account.RefreshToken,
)
router.GET("/me",
middleware.AuthorizeUser(nil),
controller.NewAccount.Me,
account.Me,
)
router.GET("/router",
middleware.AuthorizeUser(nil),
controller.NewAccount.Router,
account.Router,
)
}
// 登录认证源
{
accountGroup.GET("/login/source",
middleware.RateLimit(middleware.LimitOption{
Time: 300,
Count: 60,
Type: middleware.LIMIT_IP,
}),
account.LoginSource,
)
accountGroup.POST("/login/ldap",
middleware.RateLimit(middleware.LimitOption{
Time: 180,
Count: 15,
Type: middleware.LIMIT_IP,
}),
account.LDAP,
)
accountGroup.POST("/login/smtp",
middleware.RateLimit(middleware.LimitOption{
Time: 180,
Count: 15,
Type: middleware.LIMIT_IP,
}),
account.SMTP,
)
accountGroup.GET("/login/oauth2/authorize",
middleware.RateLimit(middleware.LimitOption{
Time: 180,
Count: 15,
Type: middleware.LIMIT_IP,
}),
account.OAuth2CodeURL,
)
accountGroup.POST("/login/oauth2/token",
middleware.RateLimit(middleware.LimitOption{
Time: 180,
Count: 15,
Type: middleware.LIMIT_IP,
}),
account.OAuth2Token,
)
}

View File

@@ -4,16 +4,13 @@ import (
"fmt"
"time"
"be.ems/src/framework/config"
"be.ems/src/framework/constants"
"be.ems/src/framework/i18n"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
"be.ems/src/framework/token"
"be.ems/src/framework/utils/parse"
"be.ems/src/modules/auth/model"
"be.ems/src/modules/auth/service"
systemModelVO "be.ems/src/modules/system/model/vo"
systemService "be.ems/src/modules/system/service"
"github.com/gin-gonic/gin"
@@ -33,95 +30,6 @@ type AccountController struct {
sysLogLoginService *systemService.SysLogLogin // 系统登录访问
}
// Login 系统登录
//
// POST /auth/login
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Param data body object true "Request Param"
// @Success 200 {object} object "Response Results"
// @Summary System Login
// @Description System Login
// @Router /auth/login [post]
func (s AccountController) Login(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
var body model.LoginBody
if err := c.ShouldBindJSON(&body); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
return
}
// 当前请求信息
ipaddr, location := reqctx.IPAddrLocation(c)
os, browser := reqctx.UaOsBrowser(c)
// 校验验证码 根据错误信息,创建系统访问记录
if err := s.accountService.ValidateCaptcha(body.Code, body.UUID); err != nil {
msg := fmt.Sprintf("%s code %s", err.Error(), body.Code)
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_NO, msg,
[4]string{ipaddr, location, os, browser},
)
c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error())))
return
}
// 登录用户信息
info, err := s.accountService.ByUsername(body.Username, body.Password)
if err != nil {
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_NO, err.Error(),
[4]string{ipaddr, location, os, browser},
)
c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error())))
return
}
data := map[string]any{}
if !config.IsSystemUser(info.UserId) {
// 强制改密码
forcePasswdChange, err := s.accountService.PasswordCountOrExpireTime(info.User.LoginCount, info.User.PasswordUpdateTime)
if err != nil {
c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error())))
return
}
if forcePasswdChange {
data["forcePasswdChange"] = true
}
}
deviceFingerprint := reqctx.DeviceFingerprint(c, info.UserId)
// 生成访问令牌
accessToken, expiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "access")
if accessToken == "" || expiresIn == 0 {
c.JSON(200, resp.ErrMsg("token generation failed"))
return
}
// 生成刷新令牌
refreshToken, refreshExpiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "refresh")
// 记录令牌,创建系统访问记录
token.UserInfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser})
s.accountService.UpdateLoginDateAndIP(info)
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_YES, "app.common.loginSuccess",
[4]string{ipaddr, location, os, browser},
)
data["tokenType"] = constants.HEADER_PREFIX
data["accessToken"] = accessToken
data["expiresIn"] = expiresIn
data["refreshToken"] = refreshToken
data["refreshExpiresIn"] = refreshExpiresIn
data["userId"] = info.UserId
c.JSON(200, resp.OkData(data))
}
// Logout 系统登出
//
// POST /auth/logout
@@ -222,82 +130,10 @@ func (s AccountController) RefreshToken(c *gin.Context) {
}))
}
// Me 登录用户信息
// LoginSource 登录认证源
//
// GET /me
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Success 200 {object} object "Response Results"
// @Security TokenAuth
// @Summary Login User Information
// @Description Login User Information
// @Router /me [get]
func (s AccountController) Me(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
info, err := reqctx.LoginUser(c)
if err != nil {
c.JSON(401, resp.CodeMsg(resp.CODE_AUTH_INVALID, err.Error()))
return
}
// 角色权限集合,系统管理员拥有所有权限
isSystemUser := config.IsSystemUser(info.UserId)
roles, perms := s.accountService.RoleAndMenuPerms(info.UserId, isSystemUser)
info.User.NickName = i18n.TKey(language, info.User.NickName)
info.User.Remark = i18n.TKey(language, info.User.Remark)
info.User.Dept.DeptName = i18n.TKey(language, info.User.Dept.DeptName)
for ri := range info.User.Roles {
info.User.Roles[ri].RoleName = i18n.TKey(language, info.User.Roles[ri].RoleName)
}
data := map[string]any{
"user": info.User,
"roles": roles,
"permissions": perms,
}
if !isSystemUser {
// 强制改密码
forcePasswdChange, _ := s.accountService.PasswordCountOrExpireTime(info.User.LoginCount, info.User.PasswordUpdateTime)
if forcePasswdChange {
data["forcePasswdChange"] = true
}
}
// GET /auth/login/source
func (s AccountController) LoginSource(c *gin.Context) {
data := s.accountService.LoginSource()
c.JSON(200, resp.OkData(data))
}
// Router 登录用户路由信息
//
// GET /router
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Success 200 {object} object "Response Results"
// @Security TokenAuth
// @Summary Login User Routing Information
// @Description Login User Routing Information
// @Router /router [get]
func (s AccountController) Router(c *gin.Context) {
loginUserId := reqctx.LoginUserToUserID(c)
// 前端路由,系统管理员拥有所有
isSystemUser := config.IsSystemUser(loginUserId)
buildMenus := s.accountService.RouteMenus(loginUserId, isSystemUser)
// 闭包函数处理多语言
language := reqctx.AcceptLanguage(c)
var converI18n func(language string, arr *[]systemModelVO.Router)
converI18n = func(language string, arr *[]systemModelVO.Router) {
for i := range *arr {
(*arr)[i].Meta.Title = i18n.TKey(language, (*arr)[i].Meta.Title)
if len((*arr)[i].Children) > 0 {
converI18n(language, &(*arr)[i].Children)
}
}
}
converI18n(language, &buildMenus)
c.JSON(200, resp.OkData(buildMenus))
}

View File

@@ -0,0 +1,93 @@
package controller
import (
"be.ems/src/framework/config"
"be.ems/src/framework/i18n"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
systemModelVO "be.ems/src/modules/system/model/vo"
"github.com/gin-gonic/gin"
)
// Me 登录用户信息
//
// GET /me
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Success 200 {object} object "Response Results"
// @Security TokenAuth
// @Summary Login User Information
// @Description Login User Information
// @Router /me [get]
func (s AccountController) Me(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
info, err := reqctx.LoginUser(c)
if err != nil {
c.JSON(401, resp.CodeMsg(resp.CODE_AUTH_INVALID, err.Error()))
return
}
// 角色权限集合,系统管理员拥有所有权限
isSystemUser := config.IsSystemUser(info.UserId)
roles, perms := s.accountService.RoleAndMenuPerms(info.UserId, isSystemUser)
info.User.NickName = i18n.TKey(language, info.User.NickName)
info.User.Remark = i18n.TKey(language, info.User.Remark)
if info.User.Dept != nil {
info.User.Dept.DeptName = i18n.TKey(language, info.User.Dept.DeptName)
}
for ri := range info.User.Roles {
info.User.Roles[ri].RoleName = i18n.TKey(language, info.User.Roles[ri].RoleName)
}
data := map[string]any{
"user": info.User,
"roles": roles,
"permissions": perms,
}
if !isSystemUser {
// 强制改密码
forcePasswdChange, _ := s.accountService.PasswordCountOrExpireTime(info.User.LoginCount, info.User.PasswordUpdateTime)
if forcePasswdChange {
data["forcePasswdChange"] = true
}
}
c.JSON(200, resp.OkData(data))
}
// Router 登录用户路由信息
//
// GET /router
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Success 200 {object} object "Response Results"
// @Security TokenAuth
// @Summary Login User Routing Information
// @Description Login User Routing Information
// @Router /router [get]
func (s AccountController) Router(c *gin.Context) {
loginUserId := reqctx.LoginUserToUserID(c)
// 前端路由,系统管理员拥有所有
isSystemUser := config.IsSystemUser(loginUserId)
buildMenus := s.accountService.RouteMenus(loginUserId, isSystemUser)
// 闭包函数处理多语言
language := reqctx.AcceptLanguage(c)
var converI18n func(language string, arr *[]systemModelVO.Router)
converI18n = func(language string, arr *[]systemModelVO.Router) {
for i := range *arr {
(*arr)[i].Meta.Title = i18n.TKey(language, (*arr)[i].Meta.Title)
if len((*arr)[i].Children) > 0 {
converI18n(language, &(*arr)[i].Children)
}
}
}
converI18n(language, &buildMenus)
c.JSON(200, resp.OkData(buildMenus))
}

View File

@@ -0,0 +1,80 @@
package controller
import (
"fmt"
"be.ems/src/framework/constants"
"be.ems/src/framework/i18n"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
"be.ems/src/framework/token"
"be.ems/src/modules/auth/model"
"github.com/gin-gonic/gin"
)
// LDAP LDAP认证登录
//
// POST /auth/ldap
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Param data body object true "Request Param"
// @Success 200 {object} object "Response Results"
// @Summary System Login
// @Description System Login
// @Router /auth/ldap [post]
func (s AccountController) LDAP(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
var body model.LoginSourceBody
if err := c.ShouldBindJSON(&body); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
return
}
// 当前请求信息
ipaddr, location := reqctx.IPAddrLocation(c)
os, browser := reqctx.UaOsBrowser(c)
// 登录用户信息
info, err := s.accountService.ByLDAP(body)
if err != nil {
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_NO, err.Error(),
[4]string{ipaddr, location, os, browser},
)
c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error())))
return
}
data := map[string]any{}
deviceFingerprint := reqctx.DeviceFingerprint(c, info.UserId)
// 生成访问令牌
accessToken, expiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "access")
if accessToken == "" || expiresIn == 0 {
c.JSON(200, resp.ErrMsg("token generation failed"))
return
}
// 生成刷新令牌
refreshToken, refreshExpiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "refresh")
// 记录令牌,创建系统访问记录
token.UserInfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser})
s.accountService.UpdateLoginDateAndIP(info)
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_YES, "app.common.loginSuccess",
[4]string{ipaddr, location, os, browser},
)
data["tokenType"] = constants.HEADER_PREFIX
data["accessToken"] = accessToken
data["expiresIn"] = expiresIn
data["refreshToken"] = refreshToken
data["refreshExpiresIn"] = refreshExpiresIn
data["userId"] = info.UserId
c.JSON(200, resp.OkData(data))
}

View File

@@ -0,0 +1,107 @@
package controller
import (
"fmt"
"be.ems/src/framework/constants"
"be.ems/src/framework/i18n"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
"be.ems/src/framework/token"
"be.ems/src/modules/auth/model"
"github.com/gin-gonic/gin"
)
// OAuth2CodeURL OAuth2认证跳转登录URL
//
// GET /auth/login/oauth2/authorize
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Param data body object true "Request Param"
// @Success 200 {object} object "Response Results"
// @Summary System Login
// @Description System Login
// @Router /auth/login/oauth2/authorize [get]
func (s AccountController) OAuth2CodeURL(c *gin.Context) {
state := c.Query("state")
if state == "" {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: state is empty"))
return
}
redirectURL, err := s.accountService.ByOAuth2CodeURL(state)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
c.Redirect(302, redirectURL)
}
// OAuth2 OAuth2认证登录
//
// POST /auth/login/oauth2/token
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Param data body object true "Request Param"
// @Success 200 {object} object "Response Results"
// @Summary System Login
// @Description System Login
// @Router /auth/login/oauth2/token [post]
func (s AccountController) OAuth2Token(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
var body model.LoginSourceOauth2Body
if err := c.ShouldBindJSON(&body); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
return
}
// 当前请求信息
ipaddr, location := reqctx.IPAddrLocation(c)
os, browser := reqctx.UaOsBrowser(c)
// 登录用户信息
info, err := s.accountService.ByOAuth2(body)
if err != nil {
s.sysLogLoginService.Insert(
body.State, constants.STATUS_NO, err.Error(),
[4]string{ipaddr, location, os, browser},
)
c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error())))
return
}
data := map[string]any{}
deviceFingerprint := reqctx.DeviceFingerprint(c, info.UserId)
// 生成访问令牌
accessToken, expiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "access")
if accessToken == "" || expiresIn == 0 {
c.JSON(200, resp.ErrMsg("token generation failed"))
return
}
// 生成刷新令牌
refreshToken, refreshExpiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "refresh")
// 记录令牌,创建系统访问记录
token.UserInfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser})
s.accountService.UpdateLoginDateAndIP(info)
s.sysLogLoginService.Insert(
body.State, constants.STATUS_YES, "app.common.loginSuccess",
[4]string{ipaddr, location, os, browser},
)
data["tokenType"] = constants.HEADER_PREFIX
data["accessToken"] = accessToken
data["expiresIn"] = expiresIn
data["refreshToken"] = refreshToken
data["refreshExpiresIn"] = refreshExpiresIn
data["userId"] = info.UserId
c.JSON(200, resp.OkData(data))
}

View File

@@ -0,0 +1,80 @@
package controller
import (
"fmt"
"be.ems/src/framework/constants"
"be.ems/src/framework/i18n"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
"be.ems/src/framework/token"
"be.ems/src/modules/auth/model"
"github.com/gin-gonic/gin"
)
// SMTP SMTP认证登录
//
// POST /auth/smtp
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Param data body object true "Request Param"
// @Success 200 {object} object "Response Results"
// @Summary System Login
// @Description System Login
// @Router /auth/smtp [post]
func (s AccountController) SMTP(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
var body model.LoginSourceBody
if err := c.ShouldBindJSON(&body); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
return
}
// 当前请求信息
ipaddr, location := reqctx.IPAddrLocation(c)
os, browser := reqctx.UaOsBrowser(c)
// 登录用户信息
info, err := s.accountService.BySMTP(body)
if err != nil {
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_NO, err.Error(),
[4]string{ipaddr, location, os, browser},
)
c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error())))
return
}
data := map[string]any{}
deviceFingerprint := reqctx.DeviceFingerprint(c, info.UserId)
// 生成访问令牌
accessToken, expiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "access")
if accessToken == "" || expiresIn == 0 {
c.JSON(200, resp.ErrMsg("token generation failed"))
return
}
// 生成刷新令牌
refreshToken, refreshExpiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "refresh")
// 记录令牌,创建系统访问记录
token.UserInfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser})
s.accountService.UpdateLoginDateAndIP(info)
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_YES, "app.common.loginSuccess",
[4]string{ipaddr, location, os, browser},
)
data["tokenType"] = constants.HEADER_PREFIX
data["accessToken"] = accessToken
data["expiresIn"] = expiresIn
data["refreshToken"] = refreshToken
data["refreshExpiresIn"] = refreshExpiresIn
data["userId"] = info.UserId
c.JSON(200, resp.OkData(data))
}

View File

@@ -0,0 +1,104 @@
package controller
import (
"fmt"
"be.ems/src/framework/config"
"be.ems/src/framework/constants"
"be.ems/src/framework/i18n"
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
"be.ems/src/framework/token"
"be.ems/src/modules/auth/model"
"github.com/gin-gonic/gin"
)
// Login 系统登录
//
// POST /auth/login
//
// @Tags common/authorization
// @Accept json
// @Produce json
// @Param data body object true "Request Param"
// @Success 200 {object} object "Response Results"
// @Summary System Login
// @Description System Login
// @Router /auth/login [post]
func (s AccountController) Login(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
var body model.LoginBody
if err := c.ShouldBindJSON(&body); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
return
}
// 当前请求信息
ipaddr, location := reqctx.IPAddrLocation(c)
os, browser := reqctx.UaOsBrowser(c)
// 校验验证码 根据错误信息,创建系统访问记录
if err := s.accountService.ValidateCaptcha(body.Code, body.UUID); err != nil {
msg := fmt.Sprintf("%s code %s", err.Error(), body.Code)
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_NO, msg,
[4]string{ipaddr, location, os, browser},
)
c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error())))
return
}
// 登录用户信息
info, err := s.accountService.ByUsername(body.Username, body.Password)
if err != nil {
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_NO, err.Error(),
[4]string{ipaddr, location, os, browser},
)
c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error())))
return
}
data := map[string]any{}
if !config.IsSystemUser(info.UserId) {
// 强制改密码
forcePasswdChange, err := s.accountService.PasswordCountOrExpireTime(info.User.LoginCount, info.User.PasswordUpdateTime)
if err != nil {
c.JSON(200, resp.ErrMsg(i18n.TKey(language, err.Error())))
return
}
if forcePasswdChange {
data["forcePasswdChange"] = true
}
}
deviceFingerprint := reqctx.DeviceFingerprint(c, info.UserId)
// 生成访问令牌
accessToken, expiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "access")
if accessToken == "" || expiresIn == 0 {
c.JSON(200, resp.ErrMsg("token generation failed"))
return
}
// 生成刷新令牌
refreshToken, refreshExpiresIn := token.UserTokenCreate(info.UserId, deviceFingerprint, "refresh")
// 记录令牌,创建系统访问记录
token.UserInfoCreate(&info, deviceFingerprint, [4]string{ipaddr, location, os, browser})
s.accountService.UpdateLoginDateAndIP(info)
s.sysLogLoginService.Insert(
body.Username, constants.STATUS_YES, "app.common.loginSuccess",
[4]string{ipaddr, location, os, browser},
)
data["tokenType"] = constants.HEADER_PREFIX
data["accessToken"] = accessToken
data["expiresIn"] = expiresIn
data["refreshToken"] = refreshToken
data["refreshExpiresIn"] = refreshExpiresIn
data["userId"] = info.UserId
c.JSON(200, resp.OkData(data))
}

View File

@@ -2,15 +2,8 @@ package model
// LoginBody 用户登录对象
type LoginBody struct {
// Username 用户名
Username string `json:"username" binding:"required"`
// Password 用户密码
Password string `json:"password" binding:"required"`
// Code 验证码
Code string `json:"code"`
// UUID 验证码唯一标识
UUID string `json:"uuid"`
Username string `json:"username" binding:"required"` // Username 用户名
Password string `json:"password" binding:"required"` // Password 用户密码
Code string `json:"code"` // Code 验证码
UUID string `json:"uuid"` // UUID 验证码唯一标识
}

View File

@@ -0,0 +1,22 @@
package model
// LoginSourceVo 认证源登录对象
type LoginSourceVo struct {
UID string `json:"uid"` // UID 认证源UID
Name string `json:"name"` // Name 认证源名称
Type string `json:"type"` // Type 认证源类型
Icon string `json:"icon"` // Icon 认证源图标
}
// LoginSourceBody 认证源用户登录对象
type LoginSourceBody struct {
Username string `json:"username" binding:"required"` // Username 用户名
Password string `json:"password" binding:"required"` // Password 用户密码
UID string `json:"uid" binding:"required"` // UID 认证源唯一标识
}
// LoginSourceOauth2Body 认证源OAuth2用户登录对象
type LoginSourceOauth2Body struct {
Code string `json:"code" binding:"required"` // Code 授权码
State string `json:"state" binding:"required"` // State 状态-认证源唯一标识
}

View File

@@ -2,21 +2,10 @@ package model
// RegisterBody 用户注册对象
type RegisterBody struct {
// Username 用户名
Username string `json:"username" binding:"required"`
// Password 用户密
Password string `json:"password" binding:"required"`
// ConfirmPassword 用户确认密码
ConfirmPassword string `json:"confirmPassword" binding:"required"`
// Code 验证码
Code string `json:"code"`
// UUID 验证码唯一标识
UUID string `json:"uuid"`
// UserType 标记用户类型
UserType string `json:"userType"`
Username string `json:"username" binding:"required"` // Username 用户名
Password string `json:"password" binding:"required"` // Password 用户密码
ConfirmPassword string `json:"confirmPassword" binding:"required"` // ConfirmPassword 用户确认密码
Code string `json:"code"` // Code 验证
UUID string `json:"uuid"` // UUID 验证码唯一标识
UserType string `json:"userType"` // UserType 标记用户类型
}

View File

@@ -2,102 +2,32 @@ package service
import (
"fmt"
"time"
"be.ems/src/framework/config"
"be.ems/src/framework/constants"
"be.ems/src/framework/database/redis"
"be.ems/src/framework/token"
"be.ems/src/framework/utils/crypto"
"be.ems/src/framework/utils/parse"
systemModelVO "be.ems/src/modules/system/model/vo"
"be.ems/src/modules/auth/model"
systemModel "be.ems/src/modules/system/model"
systemService "be.ems/src/modules/system/service"
)
// 实例化服务层 Account 结构体
var NewAccount = &Account{
sysUserService: systemService.NewSysUser,
sysConfigService: systemService.NewSysConfig,
sysRoleService: systemService.NewSysRole,
sysMenuService: systemService.NewSysMenu,
sysUserService: systemService.NewSysUser,
sysConfigService: systemService.NewSysConfig,
sysRoleService: systemService.NewSysRole,
sysMenuService: systemService.NewSysMenu,
sysLogSourceService: systemService.NewSysLoginSource,
}
// 账号身份操作服务 服务层处理
type Account struct {
sysUserService *systemService.SysUser // 用户信息服务
sysConfigService *systemService.SysConfig // 参数配置服务
sysRoleService *systemService.SysRole // 角色服务
sysMenuService *systemService.SysMenu // 菜单服务
}
// ValidateCaptcha 校验验证码
func (s *Account) ValidateCaptcha(code, uuid string) error {
// 验证码检查,从数据库配置获取验证码开关 true开启false关闭
captchaEnabledStr := s.sysConfigService.FindValueByKey("sys.account.captchaEnabled")
if !parse.Boolean(captchaEnabledStr) {
return nil
}
if code == "" || uuid == "" {
// 验证码信息错误
return fmt.Errorf("captcha.err")
}
verifyKey := constants.CACHE_CAPTCHA_CODE + ":" + uuid
captcha, _ := redis.Get("", verifyKey)
if captcha == "" {
// 验证码已失效
return fmt.Errorf("captcha.errValid")
}
_ = redis.Del("", verifyKey)
if captcha != code {
// 验证码错误
return fmt.Errorf("captcha.err")
}
return nil
}
// ByUsername 登录创建用户信息
func (s Account) ByUsername(username, password string) (token.UserInfo, error) {
info := token.UserInfo{}
// 检查密码重试次数
retryKey, retryCount, lockTime, err := s.passwordRetryCount(username)
if err != nil {
return info, err
}
// 查询用户登录账号
sysUser := s.sysUserService.FindByUserName(username)
if sysUser.UserName != username {
return info, fmt.Errorf("login.errNameOrPasswd")
}
if sysUser.DelFlag == constants.STATUS_YES {
return info, fmt.Errorf("login.errDelFlag")
}
if sysUser.StatusFlag == constants.STATUS_NO {
return info, fmt.Errorf("login.errStatus")
}
// 检验用户密码
compareBool := crypto.BcryptCompare(password, sysUser.Password)
if compareBool {
s.CleanLoginRecordCache(sysUser.UserName) // 清除错误记录次数
} else {
_ = redis.Set("", retryKey, retryCount+1, lockTime)
return info, fmt.Errorf("login.errNameOrPasswd")
}
// 登录用户信息
info.UserId = sysUser.UserId
info.DeptId = sysUser.DeptId
info.User = sysUser
// 用户权限组标识
if config.IsSystemUser(sysUser.UserId) {
info.Permissions = []string{constants.SYS_PERMISSION_SYSTEM}
} else {
perms := s.sysMenuService.FindPermsByUserId(sysUser.UserId)
info.Permissions = parse.RemoveDuplicates(perms)
}
return info, nil
sysUserService *systemService.SysUser // 用户信息服务
sysConfigService *systemService.SysConfig // 参数配置服务
sysRoleService *systemService.SysRole // 角色服务
sysMenuService *systemService.SysMenu // 菜单服务
sysLogSourceService *systemService.SysLoginSource // 认证源
}
// ByUserId 用户ID刷新令牌创建用户信息
@@ -140,86 +70,43 @@ func (s Account) UpdateLoginDateAndIP(info token.UserInfo) bool {
return s.sysUserService.Update(user) > 0
}
// CleanLoginRecordCache 清除错误记录次数
func (s Account) CleanLoginRecordCache(userName string) bool {
cacheKey := fmt.Sprintf("%s:%s", constants.CACHE_PWD_ERR_COUNT, userName)
hasKey, err := redis.Has("", cacheKey)
if hasKey > 0 && err == nil {
return redis.Del("", cacheKey) == nil
// LoginSource 登录认证源
func (s Account) LoginSource() []model.LoginSourceVo {
rows := s.sysLogSourceService.FindByActive("")
data := make([]model.LoginSourceVo, 0)
for _, v := range rows {
data = append(data, model.LoginSourceVo{
UID: v.UID,
Name: v.Name,
Type: v.Type,
Icon: v.Icon,
})
}
return false
return data
}
// passwordRetryCount 密码重试次数
func (s Account) passwordRetryCount(userName string) (string, int64, time.Duration, error) {
// 从数据库配置获取登录次数和错误锁定时间
maxRetryCountStr := s.sysConfigService.FindValueByKey("sys.user.maxRetryCount")
lockTimeStr := s.sysConfigService.FindValueByKey("sys.user.lockTime")
// 验证登录次数和错误锁定时间
maxRetryCount := parse.Number(maxRetryCountStr)
lockTime := parse.Number(lockTimeStr)
// initLoginSourceUser 初始化登录源用户
func (s *Account) initLoginSourceUser(uid, sType, username, password string) systemModel.SysUser {
sysUser := systemModel.SysUser{
UserName: username,
NickName: username, // 昵称使用名称账号
Password: password, // 原始密码
UserType: sType,
UserSource: uid,
Sex: "0", // 性别未选择
StatusFlag: constants.STATUS_YES, // 账号状态激活
DeptId: 101, // 归属部门为根节点
CreateBy: sType, // 创建来源
}
// 验证缓存记录次数
retryKey := fmt.Sprintf("%s:%s", constants.CACHE_PWD_ERR_COUNT, userName)
retryCount, err := redis.Get("", retryKey)
if retryCount == "" || err != nil {
retryCount = "0"
// 新增用户的角色管理
sysUser.RoleIds = []int64{5}
// 新增用户的岗位管理
sysUser.PostIds = []int64{}
insertId := s.sysUserService.Insert(sysUser)
if insertId > 0 {
sysUser.UserId = insertId
}
// 是否超过错误值
retryCountInt64 := parse.Number(retryCount)
if retryCountInt64 >= int64(maxRetryCount) {
// msg := fmt.Sprintf("密码输入错误 %d 次,帐户锁定 %d 分钟", maxRetryCount, lockTime)
msg := fmt.Errorf("login.errRetryPasswd") // 密码输入错误多次,帐户已被锁定
return retryKey, retryCountInt64, time.Duration(lockTime) * time.Minute, fmt.Errorf("%s", msg)
}
return retryKey, retryCountInt64, time.Duration(lockTime) * time.Minute, nil
}
// PasswordCountOrExpireTime 首次登录或密码过期时间
func (s Account) PasswordCountOrExpireTime(loginCount, passwordUpdateTime int64) (bool, error) {
forcePasswdChange := false
// 从数据库配置获取-首次登录密码修改
fristPasswdChangeStr := s.sysConfigService.FindValueByKey("sys.user.fristPasswdChange")
if parse.Boolean(fristPasswdChangeStr) {
forcePasswdChange = loginCount < 1 || passwordUpdateTime == 0
}
// 非首次登录,判断密码是否过期
if !forcePasswdChange {
alert, err := s.sysUserService.ValidatePasswordExpireTime(passwordUpdateTime)
if err != nil {
return alert, err
}
forcePasswdChange = alert
}
return forcePasswdChange, nil
}
// RoleAndMenuPerms 角色和菜单数据权限
func (s Account) RoleAndMenuPerms(userId int64, isSystemUser bool) ([]string, []string) {
if isSystemUser {
return []string{constants.SYS_ROLE_SYSTEM_KEY}, []string{constants.SYS_PERMISSION_SYSTEM}
}
// 角色key
var roleGroup []string
roles := s.sysRoleService.FindByUserId(userId)
for _, role := range roles {
roleGroup = append(roleGroup, role.RoleKey)
}
// 菜单权限key
perms := s.sysMenuService.FindPermsByUserId(userId)
return parse.RemoveDuplicates(roleGroup), parse.RemoveDuplicates(perms)
}
// RouteMenus 前端路由所需要的菜单
func (s Account) RouteMenus(userId int64, isSystemUser bool) []systemModelVO.Router {
var buildMenus []systemModelVO.Router
if isSystemUser {
menus := s.sysMenuService.BuildTreeMenusByUserId(0)
buildMenus = s.sysMenuService.BuildRouteMenus(menus, "")
} else {
menus := s.sysMenuService.BuildTreeMenusByUserId(userId)
buildMenus = s.sysMenuService.BuildRouteMenus(menus, "")
}
return buildMenus
return s.sysUserService.FindByUserName(username, sType, uid)
}

View File

@@ -0,0 +1,36 @@
package service
import (
"be.ems/src/framework/constants"
"be.ems/src/framework/utils/parse"
systemModelVO "be.ems/src/modules/system/model/vo"
)
// RoleAndMenuPerms 角色和菜单数据权限
func (s Account) RoleAndMenuPerms(userId int64, isSystemUser bool) ([]string, []string) {
if isSystemUser {
return []string{constants.SYS_ROLE_SYSTEM_KEY}, []string{constants.SYS_PERMISSION_SYSTEM}
}
// 角色key
var roleGroup []string
roles := s.sysRoleService.FindByUserId(userId)
for _, role := range roles {
roleGroup = append(roleGroup, role.RoleKey)
}
// 菜单权限key
perms := s.sysMenuService.FindPermsByUserId(userId)
return parse.RemoveDuplicates(roleGroup), parse.RemoveDuplicates(perms)
}
// RouteMenus 前端路由所需要的菜单
func (s Account) RouteMenus(userId int64, isSystemUser bool) []systemModelVO.Router {
var buildMenus []systemModelVO.Router
if isSystemUser {
menus := s.sysMenuService.BuildTreeMenusByUserId(0)
buildMenus = s.sysMenuService.BuildRouteMenus(menus, "")
} else {
menus := s.sysMenuService.BuildTreeMenusByUserId(userId)
buildMenus = s.sysMenuService.BuildRouteMenus(menus, "")
}
return buildMenus
}

View File

@@ -0,0 +1,108 @@
package service
import (
"encoding/json"
"fmt"
"github.com/go-ldap/ldap/v3"
"be.ems/src/framework/config"
"be.ems/src/framework/constants"
"be.ems/src/framework/token"
"be.ems/src/framework/utils/parse"
"be.ems/src/modules/auth/model"
systemModelVo "be.ems/src/modules/system/model/vo"
)
// ByLDAP 登录创建用户信息
func (s *Account) ByLDAP(body model.LoginSourceBody) (token.UserInfo, error) {
info := token.UserInfo{}
rows := s.sysLogSourceService.FindByActive(body.UID)
if len(rows) != 1 {
return info, fmt.Errorf("ldap auth source not exist")
}
item := rows[0]
if item.Config == "" {
return info, fmt.Errorf("ldap auth source config is empty")
}
var source systemModelVo.SysLoginSourceLDAP
if err := json.Unmarshal([]byte(item.Config), &source); err != nil {
return info, err
}
// 校验LDAP用户
err := ldapAuth(source, body.Username, body.Password)
if err != nil {
return info, err
}
// 查询用户登录账号
sysUser := s.sysUserService.FindByUserName(body.Username, item.Type, item.UID)
if sysUser.UserId == 0 || sysUser.UserName == "" {
sysUser = s.initLoginSourceUser(item.UID, item.Type, body.Username, body.Password)
}
if sysUser.UserId == 0 || sysUser.UserName != body.Username {
return info, fmt.Errorf("login.errNameOrPasswd")
}
if sysUser.DelFlag == constants.STATUS_YES {
return info, fmt.Errorf("login.errDelFlag")
}
if sysUser.StatusFlag == constants.STATUS_NO {
return info, fmt.Errorf("login.errStatus")
}
// 登录用户信息
info.UserId = sysUser.UserId
info.DeptId = sysUser.DeptId
info.User = sysUser
// 用户权限组标识
if config.IsSystemUser(sysUser.UserId) {
info.Permissions = []string{constants.SYS_PERMISSION_SYSTEM}
} else {
perms := s.sysMenuService.FindPermsByUserId(sysUser.UserId)
info.Permissions = parse.RemoveDuplicates(perms)
}
return info, nil
}
// ldapAuth 校验LDAP用户
func ldapAuth(source systemModelVo.SysLoginSourceLDAP, username, password string) error {
// 连接LDAP
l, err := ldap.DialURL(source.URL)
if err != nil {
return err
}
defer l.Close()
// 绑定DN校验
if source.BindDN != "" && source.BindPassword != "" {
if err := l.Bind(source.BindDN, source.BindPassword); err != nil {
return fmt.Errorf("ldap user bind %s", err)
}
}
// 搜索用户
searchRequest := ldap.NewSearchRequest(
source.BaseDN,
ldap.ScopeWholeSubtree, ldap.NeverDerefAliases, 0, 0, false,
fmt.Sprintf(source.UserFilter, ldap.EscapeFilter(username)),
[]string{"dn", "uid"},
nil,
)
sr, err := l.Search(searchRequest)
if err != nil {
return fmt.Errorf("ldap user search %s", err)
}
// for _, entry := range sr.Entries {
// fmt.Printf("%s ==== %v\n", entry.DN, entry.GetAttributeValue("uid"))
// }
if len(sr.Entries) != 1 {
return fmt.Errorf("ldap user does not exist or too many entries returned")
}
// 校验密码
if err = l.Bind(sr.Entries[0].DN, password); err != nil {
return fmt.Errorf("ldap user bind %s", err)
}
return nil
}

View File

@@ -0,0 +1,168 @@
package service
import (
"context"
"encoding/json"
"fmt"
"reflect"
"strings"
"time"
"golang.org/x/oauth2"
"be.ems/src/framework/config"
"be.ems/src/framework/constants"
"be.ems/src/framework/token"
"be.ems/src/framework/utils/parse"
"be.ems/src/modules/auth/model"
systemModelVo "be.ems/src/modules/system/model/vo"
)
// ByOAuth2CodeURL 获取OAuth2登录URL
func (s *Account) ByOAuth2CodeURL(state string) (string, error) {
rows := s.sysLogSourceService.FindByActive(state)
if len(rows) != 1 {
return "", fmt.Errorf("oauth2 auth source not exist")
}
item := rows[0]
if item.Config == "" {
return "", fmt.Errorf("oauth2 auth source config is empty")
}
var source systemModelVo.SysLoginSourceOAuth2
json.Unmarshal([]byte(item.Config), &source)
conf := oauth2.Config{
ClientID: source.ClientID,
ClientSecret: source.ClientSecret,
RedirectURL: source.RedirectURL,
Scopes: source.Scopes,
Endpoint: oauth2.Endpoint{
AuthURL: source.AuthURL,
TokenURL: source.TokenURL,
},
}
return conf.AuthCodeURL(state, oauth2.AccessTypeOffline), nil
}
// ByOAuth2 登录创建用户信息
func (s *Account) ByOAuth2(body model.LoginSourceOauth2Body) (token.UserInfo, error) {
info := token.UserInfo{}
rows := s.sysLogSourceService.FindByActive(body.State)
if len(rows) != 1 {
return info, fmt.Errorf("oauth2 auth source not exist")
}
item := rows[0]
if item.Config == "" {
return info, fmt.Errorf("oauth2 auth source config is empty")
}
var source systemModelVo.SysLoginSourceOAuth2
if err := json.Unmarshal([]byte(item.Config), &source); err != nil {
return info, err
}
// 校验OAuth2用户
account, err := oauth2Auth(source, body.Code)
if err != nil {
return info, err
}
// 查询用户登录账号
sysUser := s.sysUserService.FindByUserName(account, item.Type, item.UID)
if sysUser.UserId == 0 || sysUser.UserName == "" {
sysUser = s.initLoginSourceUser(item.UID, item.Type, account, account)
}
if sysUser.UserId == 0 || sysUser.UserName != account {
return info, fmt.Errorf("login.errNameOrPasswd")
}
if sysUser.DelFlag == constants.STATUS_YES {
return info, fmt.Errorf("login.errDelFlag")
}
if sysUser.StatusFlag == constants.STATUS_NO {
return info, fmt.Errorf("login.errStatus")
}
// 登录用户信息
info.UserId = sysUser.UserId
info.DeptId = sysUser.DeptId
info.User = sysUser
// 用户权限组标识
if config.IsSystemUser(sysUser.UserId) {
info.Permissions = []string{constants.SYS_PERMISSION_SYSTEM}
} else {
perms := s.sysMenuService.FindPermsByUserId(sysUser.UserId)
info.Permissions = parse.RemoveDuplicates(perms)
}
return info, nil
}
// oauth2Auth 校验OAuth2用户
func oauth2Auth(source systemModelVo.SysLoginSourceOAuth2, code string) (string, error) {
ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second)
defer cancel()
conf := oauth2.Config{
ClientID: source.ClientID,
ClientSecret: source.ClientSecret,
RedirectURL: source.RedirectURL,
Scopes: source.Scopes,
Endpoint: oauth2.Endpoint{
AuthURL: source.AuthURL,
TokenURL: source.TokenURL,
},
}
token, err := conf.Exchange(ctx, code)
if err != nil {
return "", err
}
// 使用token创建HTTP客户端 请求用户信息
resp, err := conf.Client(ctx, token).Get(source.UserURL)
if err != nil {
return "", err
}
defer resp.Body.Close()
// 解析用户信息
var userInfo map[string]any
if err := json.NewDecoder(resp.Body).Decode(&userInfo); err != nil {
return "", err
}
// 读取嵌套数据
value, found := getValueByPath(userInfo, source.AccountField)
if !found {
return "", fmt.Errorf("oauth2 auth source account field not exist")
}
return fmt.Sprintf("%v", value), nil
}
// getValueByPath 从嵌套的 map[string]any 获取嵌套键对应的值
func getValueByPath(data map[string]any, path string) (any, bool) {
keys := strings.Split(path, ".") // 按照 "." 拆分路径
return getValue(data, keys)
}
// getValue 是递归查找嵌套 map 的函数
func getValue(data map[string]any, keys []string) (any, bool) {
if len(keys) == 0 {
return data, false
}
// 获取当前键
key := keys[0]
// 获取当前键的值
val, ok := data[key]
if !ok {
return nil, false // 找不到键,返回 false
}
// 如果还有嵌套键,继续查找
if len(keys) > 1 {
// 递归查找嵌套 map
if reflect.TypeOf(val).Kind() == reflect.Map {
// 将 `any` 转换为 `map[string]any` 类型
if nestedMap, ok := val.(map[string]any); ok {
return getValue(nestedMap, keys[1:])
}
}
}
return val, true
}

View File

@@ -0,0 +1,88 @@
package service
import (
"context"
"crypto/tls"
"encoding/json"
"fmt"
"github.com/wneessen/go-mail"
"be.ems/src/framework/config"
"be.ems/src/framework/constants"
"be.ems/src/framework/token"
"be.ems/src/framework/utils/parse"
"be.ems/src/modules/auth/model"
systemModelVo "be.ems/src/modules/system/model/vo"
)
// BySMTP 登录创建用户信息
func (s *Account) BySMTP(body model.LoginSourceBody) (token.UserInfo, error) {
info := token.UserInfo{}
rows := s.sysLogSourceService.FindByActive(body.UID)
if len(rows) != 1 {
return info, fmt.Errorf("smtp auth source not exist")
}
item := rows[0]
if item.Config == "" {
return info, fmt.Errorf("smtp auth source config is empty")
}
var source systemModelVo.SysLoginSourceSMTP
if err := json.Unmarshal([]byte(item.Config), &source); err != nil {
return info, err
}
// 校验SMTP用户
err := smtpAuth(source, body.Username, body.Password)
if err != nil {
return info, err
}
// 查询用户登录账号
sysUser := s.sysUserService.FindByUserName(body.Username, item.Type, item.UID)
if sysUser.UserId == 0 || sysUser.UserName == "" {
sysUser = s.initLoginSourceUser(item.UID, item.Type, body.Username, body.Password)
}
if sysUser.UserId == 0 || sysUser.UserName != body.Username {
return info, fmt.Errorf("login.errNameOrPasswd")
}
if sysUser.DelFlag == constants.STATUS_YES {
return info, fmt.Errorf("login.errDelFlag")
}
if sysUser.StatusFlag == constants.STATUS_NO {
return info, fmt.Errorf("login.errStatus")
}
// 登录用户信息
info.UserId = sysUser.UserId
info.DeptId = sysUser.DeptId
info.User = sysUser
// 用户权限组标识
if config.IsSystemUser(sysUser.UserId) {
info.Permissions = []string{constants.SYS_PERMISSION_SYSTEM}
} else {
perms := s.sysMenuService.FindPermsByUserId(sysUser.UserId)
info.Permissions = parse.RemoveDuplicates(perms)
}
return info, nil
}
// smtpAuth 校验SMTP用户
func smtpAuth(source systemModelVo.SysLoginSourceSMTP, username, password string) error {
client, err := mail.NewClient(source.Host,
mail.WithSMTPAuth(mail.SMTPAuthAutoDiscover),
mail.WithUsername(username),
mail.WithPort(source.Port),
mail.WithPassword(password),
mail.WithTLSConfig(&tls.Config{InsecureSkipVerify: true}),
)
if err != nil {
return fmt.Errorf("failed to create mail client %s", err)
}
// 连接到邮件SMTP服务器
if err = client.DialWithContext(context.Background()); err != nil {
return err
}
defer client.Close()
return nil
}

View File

@@ -0,0 +1,138 @@
package service
import (
"fmt"
"time"
"be.ems/src/framework/config"
"be.ems/src/framework/constants"
"be.ems/src/framework/database/redis"
"be.ems/src/framework/token"
"be.ems/src/framework/utils/crypto"
"be.ems/src/framework/utils/parse"
)
// ValidateCaptcha 校验验证码
func (s Account) ValidateCaptcha(code, uuid string) error {
// 验证码检查,从数据库配置获取验证码开关 true开启false关闭
captchaEnabledStr := s.sysConfigService.FindValueByKey("sys.account.captchaEnabled")
if !parse.Boolean(captchaEnabledStr) {
return nil
}
if code == "" || uuid == "" {
// 验证码信息错误
return fmt.Errorf("captcha.err")
}
verifyKey := constants.CACHE_CAPTCHA_CODE + ":" + uuid
captcha, _ := redis.Get("", verifyKey)
if captcha == "" {
// 验证码已失效
return fmt.Errorf("captcha.errValid")
}
_ = redis.Del("", verifyKey)
if captcha != code {
// 验证码错误
return fmt.Errorf("captcha.err")
}
return nil
}
// ByUsername 登录创建用户信息
func (s Account) ByUsername(username, password string) (token.UserInfo, error) {
info := token.UserInfo{}
// 检查密码重试次数
retryKey, retryCount, lockTime, err := s.passwordRetryCount(username)
if err != nil {
return info, err
}
// 查询用户登录账号
sysUser := s.sysUserService.FindByUserName(username, "System", "#")
if sysUser.UserName != username {
return info, fmt.Errorf("login.errNameOrPasswd")
}
if sysUser.DelFlag == constants.STATUS_YES {
return info, fmt.Errorf("login.errDelFlag")
}
if sysUser.StatusFlag == constants.STATUS_NO {
return info, fmt.Errorf("login.errStatus")
}
// 检验用户密码
compareBool := crypto.BcryptCompare(password, sysUser.Password)
if compareBool {
s.CleanLoginRecordCache(sysUser.UserName) // 清除错误记录次数
} else {
_ = redis.Set("", retryKey, retryCount+1, lockTime)
return info, fmt.Errorf("login.errNameOrPasswd")
}
// 登录用户信息
info.UserId = sysUser.UserId
info.DeptId = sysUser.DeptId
info.User = sysUser
// 用户权限组标识
if config.IsSystemUser(sysUser.UserId) {
info.Permissions = []string{constants.SYS_PERMISSION_SYSTEM}
} else {
perms := s.sysMenuService.FindPermsByUserId(sysUser.UserId)
info.Permissions = parse.RemoveDuplicates(perms)
}
return info, nil
}
// CleanLoginRecordCache 清除错误记录次数
func (s Account) CleanLoginRecordCache(userName string) bool {
cacheKey := fmt.Sprintf("%s:%s", constants.CACHE_PWD_ERR_COUNT, userName)
hasKey, err := redis.Has("", cacheKey)
if hasKey > 0 && err == nil {
return redis.Del("", cacheKey) == nil
}
return false
}
// passwordRetryCount 密码重试次数
func (s Account) passwordRetryCount(userName string) (string, int64, time.Duration, error) {
// 从数据库配置获取登录次数和错误锁定时间
maxRetryCountStr := s.sysConfigService.FindValueByKey("sys.user.maxRetryCount")
lockTimeStr := s.sysConfigService.FindValueByKey("sys.user.lockTime")
// 验证登录次数和错误锁定时间
maxRetryCount := parse.Number(maxRetryCountStr)
lockTime := parse.Number(lockTimeStr)
// 验证缓存记录次数
retryKey := fmt.Sprintf("%s:%s", constants.CACHE_PWD_ERR_COUNT, userName)
retryCount, err := redis.Get("", retryKey)
if retryCount == "" || err != nil {
retryCount = "0"
}
// 是否超过错误值
retryCountInt64 := parse.Number(retryCount)
if retryCountInt64 >= int64(maxRetryCount) {
// msg := fmt.Sprintf("密码输入错误 %d 次,帐户锁定 %d 分钟", maxRetryCount, lockTime)
msg := fmt.Errorf("login.errRetryPasswd") // 密码输入错误多次,帐户已被锁定
return retryKey, retryCountInt64, time.Duration(lockTime) * time.Minute, fmt.Errorf("%s", msg)
}
return retryKey, retryCountInt64, time.Duration(lockTime) * time.Minute, nil
}
// PasswordCountOrExpireTime 首次登录或密码过期时间
func (s Account) PasswordCountOrExpireTime(loginCount, passwordUpdateTime int64) (bool, error) {
forcePasswdChange := false
// 从数据库配置获取-首次登录密码修改
fristPasswdChangeStr := s.sysConfigService.FindValueByKey("sys.user.fristPasswdChange")
if parse.Boolean(fristPasswdChangeStr) {
forcePasswdChange = loginCount < 1 || passwordUpdateTime == 0
}
// 非首次登录,判断密码是否过期
if !forcePasswdChange {
alert, err := s.sysUserService.ValidatePasswordExpireTime(passwordUpdateTime)
if err != nil {
return alert, err
}
forcePasswdChange = alert
}
return forcePasswdChange, nil
}

View File

@@ -61,12 +61,14 @@ func (s Register) ByUserName(username, password string) (int64, error) {
sysUser := systemModel.SysUser{
UserName: username,
NickName: username, // 昵称使用名称账号
Password: password, // 原始密码
NickName: username, // 昵称使用名称账号
Password: password, // 原始密码
UserType: "System",
UserSource: "#",
Sex: "0", // 性别未选择
StatusFlag: constants.STATUS_YES, // 账号状态激活
DeptId: 100, // 归属部门为根节点
CreateBy: "register", // 创建来源
DeptId: 101, // 归属部门为根节点
CreateBy: "System", // 创建来源
}
// 新增用户的角色管理

View File

@@ -1,8 +1,8 @@
package controller
import (
"encoding/json"
"fmt"
"strings"
"github.com/gin-gonic/gin"
@@ -10,54 +10,54 @@ import (
"be.ems/src/framework/reqctx"
"be.ems/src/framework/resp"
"be.ems/src/framework/utils/parse"
"be.ems/src/modules/oauth2/model"
"be.ems/src/modules/oauth2/service"
"be.ems/src/modules/system/model"
"be.ems/src/modules/system/service"
)
// NewOauth2Client 实例化控制层
var NewOauth2Client = &Oauth2ClientController{
oauth2ClientService: service.NewOauth2ClientService,
// NewLoginSource 实例化控制层
var NewSysLoginSource = &SysLoginSourceController{
sysLoginSourceService: service.NewSysLoginSource,
}
// Oauth2ClientController 客户端授权管理 控制层处理
// SysLoginSourceController 认证源管理 控制层处理
//
// PATH /oauth2/client
type Oauth2ClientController struct {
oauth2ClientService *service.Oauth2ClientService // 用户授权第三方应用信息服务
// PATH /sys/login-source
type SysLoginSourceController struct {
sysLoginSourceService *service.SysLoginSource // 认证源信息服务
}
// List 列表
//
// GET /list
func (s Oauth2ClientController) List(c *gin.Context) {
func (s SysLoginSourceController) List(c *gin.Context) {
query := reqctx.QueryMap(c)
rows, total := s.oauth2ClientService.FindByPage(query)
rows, total := s.sysLoginSourceService.FindByPage(query)
c.JSON(200, resp.OkData(map[string]any{"rows": rows, "total": total}))
}
// Info 信息
//
// GET /:clientId
func (s Oauth2ClientController) Info(c *gin.Context) {
clientId := c.Param("clientId")
if clientId == "" {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: clientId is empty"))
// GET /:id
func (s SysLoginSourceController) Info(c *gin.Context) {
id := c.Param("id")
if id == "" {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: id is empty"))
return
}
info := s.oauth2ClientService.FindByClientId(clientId)
if info.ClientId == clientId {
info := s.sysLoginSourceService.FindById(parse.Number(id))
if info.Id == parse.Number(id) {
c.JSON(200, resp.OkData(info))
return
}
c.JSON(200, resp.ErrMsg("clientId does not exist"))
c.JSON(200, resp.ErrMsg("id does not exist"))
}
// Add 新增
//
// POST /
func (s Oauth2ClientController) Add(c *gin.Context) {
var body model.Oauth2Client
func (s SysLoginSourceController) Add(c *gin.Context) {
var body model.SysLoginSource
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
@@ -67,23 +67,19 @@ func (s Oauth2ClientController) Add(c *gin.Context) {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: id not is empty"))
return
}
// 本地IP地址不支持
localHosts := []string{"127.0.0.1", "localhost", "::ffff:", "::1"}
localHost := false
for _, host := range localHosts {
if strings.Contains(body.IPWhite, host) {
localHost = true
break
}
}
if localHost {
c.JSON(200, resp.ErrMsg("no support local host"))
if len(body.Config) < 7 || !json.Valid([]byte(body.Config)) {
c.JSON(200, resp.ErrMsg("config json format error"))
return
}
configStr, err := s.sysLoginSourceService.CheckConfigJSON(body.Type, body.Config)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
body.Config = configStr
body.CreateBy = reqctx.LoginUserToUserName(c)
insertId := s.oauth2ClientService.Insert(body)
insertId := s.sysLoginSourceService.Insert(body)
if insertId > 0 {
c.JSON(200, resp.OkData(insertId))
return
@@ -94,8 +90,8 @@ func (s Oauth2ClientController) Add(c *gin.Context) {
// Edit 更新
//
// PUT /
func (s Oauth2ClientController) Edit(c *gin.Context) {
var body model.Oauth2Client
func (s SysLoginSourceController) Edit(c *gin.Context) {
var body model.SysLoginSource
if err := c.ShouldBindBodyWithJSON(&body); err != nil {
errMsgs := fmt.Sprintf("bind err: %s", resp.FormatBindError(err))
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_PARSER, errMsgs))
@@ -105,33 +101,32 @@ func (s Oauth2ClientController) Edit(c *gin.Context) {
c.JSON(422, resp.CodeMsg(resp.CODE_PARAM_CHEACK, "bind err: id is empty"))
return
}
// 本地IP地址不支持
localHosts := []string{"127.0.0.1", "localhost", "::ffff:", "::1"}
localHost := false
for _, host := range localHosts {
if strings.Contains(body.IPWhite, host) {
localHost = true
break
}
}
if localHost {
c.JSON(200, resp.ErrMsg("no support local host"))
if len(body.Config) < 7 || !json.Valid([]byte(body.Config)) {
c.JSON(200, resp.ErrMsg("config json format error"))
return
}
configStr, err := s.sysLoginSourceService.CheckConfigJSON(body.Type, body.Config)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return
}
body.Config = configStr
// 查询信息
info := s.oauth2ClientService.FindById(body.Id)
if info.ClientId == "" || info.Id != body.Id {
info := s.sysLoginSourceService.FindById(body.Id)
if info.Id != body.Id {
c.JSON(200, resp.ErrMsg("modification failed, data not exist"))
return
}
info.Title = body.Title
info.IPWhite = body.IPWhite
info.Type = body.Type
info.Name = body.Name
info.Icon = body.Icon
info.Config = body.Config
info.ActiveFlag = body.ActiveFlag
info.Remark = body.Remark
info.UpdateBy = reqctx.LoginUserToUserName(c)
rowsAffected := s.oauth2ClientService.Update(info)
rowsAffected := s.sysLoginSourceService.Update(info)
if rowsAffected > 0 {
c.JSON(200, resp.Ok(nil))
return
@@ -142,7 +137,7 @@ func (s Oauth2ClientController) Edit(c *gin.Context) {
// Remove 删除
//
// DELETE /:id
func (s Oauth2ClientController) Remove(c *gin.Context) {
func (s SysLoginSourceController) Remove(c *gin.Context) {
language := reqctx.AcceptLanguage(c)
id := c.Param("id")
if id == "" {
@@ -158,7 +153,7 @@ func (s Oauth2ClientController) Remove(c *gin.Context) {
ids = append(ids, parse.Number(v))
}
rows, err := s.oauth2ClientService.DeleteByIds(ids)
rows, err := s.sysLoginSourceService.DeleteByIds(ids)
if err != nil {
c.JSON(200, resp.ErrMsg(err.Error()))
return

View File

@@ -550,15 +550,19 @@ func (s *SysUserController) Export(c *gin.Context) {
"C1": i18n.TKey(language, "user.export.nick"),
"D1": i18n.TKey(language, "user.export.role"),
"E1": i18n.TKey(language, "user.export.deptName"),
"F1": i18n.TKey(language, "user.export.loginIP"),
"G1": i18n.TKey(language, "user.export.loginDate"),
"H1": i18n.TKey(language, "user.export.status"),
"F1": i18n.TKey(language, "user.export.userType"),
"G1": i18n.TKey(language, "user.export.loginIP"),
"H1": i18n.TKey(language, "user.export.loginDate"),
"I1": i18n.TKey(language, "user.export.status"),
// "F1": i18n.TKey(language, "user.export.sex"),
// "E1": i18n.TKey(language, "user.export.phone"),
// "D1": i18n.TKey(language, "user.export.email"),
// "I1": i18n.TKey(language, "user.export.deptID"),
// "K1": i18n.TKey(language, "user.export.deptLeader"),
}
// 读取用户性别字典数据
dictSysUserType := service.NewSysDictType.FindDataByType("sys_user_type")
// 读取用户性别字典数据
// dictSysUserSex := s.sysDictDataService.SelectDictDataByType("sys_user_sex")
// 从第二行开始的数据
@@ -573,6 +577,14 @@ func (s *SysUserController) Export(c *gin.Context) {
// break
// }
// }
// 用户类型
userType := row.UserType
for _, v := range dictSysUserType {
if row.UserType == v.DataValue && row.UserSource != "#" {
userType = i18n.TKey(language, v.DataLabel) + " " + row.UserSource
break
}
}
// 帐号状态
statusValue := i18n.TKey(language, "dictData.disable")
if row.StatusFlag == "1" {
@@ -581,7 +593,11 @@ func (s *SysUserController) Export(c *gin.Context) {
// 用户角色, 默认导出首个
userRole := ""
if len(row.Roles) > 0 {
userRole = i18n.TKey(language, row.Roles[0].RoleName)
arr := make([]string, 0)
for _, v := range row.Roles {
arr = append(arr, i18n.TKey(language, v.RoleName))
}
userRole = strings.Join(arr, ",")
}
dataCells = append(dataCells, map[string]any{
"A" + idx: row.UserId,
@@ -589,9 +605,10 @@ func (s *SysUserController) Export(c *gin.Context) {
"C" + idx: row.NickName,
"D" + idx: userRole,
"E" + idx: row.Dept.DeptName,
"F" + idx: row.LoginIp,
"G" + idx: date.ParseDateToStr(row.LoginTime, date.YYYY_MM_DDTHH_MM_SSZ),
"H" + idx: statusValue,
"F" + idx: userType,
"G" + idx: row.LoginIp,
"H" + idx: date.ParseDateToStr(row.LoginTime, date.YYYY_MM_DDTHH_MM_SSZ),
"I" + idx: statusValue,
// "E" + idx: row.PhoneNumber,
// "F" + idx: sysUserSex,
// "D" + idx: row.Email,
@@ -725,7 +742,7 @@ func (s *SysUserController) Import(c *gin.Context) {
}
// 验证是否存在这个用户
newSysUser := s.sysUserService.FindByUserName(row["B"])
newSysUser := s.sysUserService.FindByUserName(row["B"], "System", "#")
newSysUser.Password = initPassword
newSysUser.UserName = row["B"]
newSysUser.NickName = row["C"]

View File

@@ -0,0 +1,22 @@
package model
// SysLoginSource 系统第三方认证源 sys_login_source
type SysLoginSource struct {
Id int64 `gorm:"column:id;primaryKey;autoIncrement" json:"id"` // ID
UID string `gorm:"column:uid" json:"uid"` // UID 16位长度字符串
Type string `gorm:"column:type" json:"type" binding:"required,oneof=LDAP SMTP OAuth2"` // 认证类型 LDAP SMTP OAuth2
Name string `gorm:"column:name" json:"name" binding:"required"` // 认证名称
Icon string `gorm:"column:icon" json:"icon"` // 图标
ActiveFlag string `gorm:"column:active_flag" json:"activeFlag"` // 激活标记0未激活 1激活
SyncFlag string `gorm:"column:sync_flag" json:"syncFlag"` // 同步标记0未同步 1同步
Config string `gorm:"column:config" json:"config" binding:"required"` // 配置JSON字符串
CreateBy string `gorm:"column:create_by" json:"createBy"` // 创建者
CreateTime int64 `gorm:"column:create_time" json:"createTime"` // 创建时间
UpdateBy string `gorm:"column:update_by" json:"updateBy"` // 更新者
UpdateTime int64 `gorm:"column:update_time" json:"updateTime"` // 更新时间
Remark string `gorm:"column:remark" json:"remark"` // 备注
}
func (*SysLoginSource) TableName() string {
return "sys_login_source"
}

View File

@@ -11,6 +11,8 @@ type SysUser struct {
Sex string `json:"sex" gorm:"column:sex"` // 用户性别0未选择 1男 2女
Avatar string `json:"avatar" gorm:"column:avatar"` // 头像地址
Password string `json:"-" gorm:"column:password"` // 密码
UserType string `json:"userType" gorm:"column:user_type"` // 用户类型System系统用户
UserSource string `json:"userSource" gorm:"column:user_source"` // 用户来源UID (系统#)
StatusFlag string `json:"statusFlag" gorm:"column:status_flag"` // 账号状态0停用 1正常
DelFlag string `json:"-" gorm:"column:del_flag"` // 删除标记0存在 1删除
PasswordUpdateTime int64 `json:"passwordUpdateTime" gorm:"column:password_update_time"` // 密码更新时间

View File

@@ -0,0 +1,28 @@
package vo
// SysLoginSourceLDAP LDAP认证源
type SysLoginSourceLDAP struct {
URL string `json:"url"` // LDAP 服务器ldap://192.168.9.58:11389
BaseDN string `json:"baseDN"` // base DNdc=example,dc=org
UserFilter string `json:"userFilter"` // 用户过滤规则((&(objectClass=organizationalPerson)(uid=%s)))
BindDN string `json:"bindDN"` // 绑定 DNcn=admin,dc=example,dc=org
BindPassword string `json:"bindPassword"` // 绑定密码adminpassword
}
// SysLoginSourceSMTP SMTP认证源
type SysLoginSourceSMTP struct {
Host string `json:"host"` // SMTP 服务器smtp.gmail.com
Port int `json:"port"` // SMTP 端口587
}
// SysLoginSourceOAuth2 OAuth2认证源
type SysLoginSourceOAuth2 struct {
ClientID string `json:"clientID"` // 客户端ID
ClientSecret string `json:"clientSecret"` // 客户端密钥
AuthURL string `json:"authURL"` // 认证URL
TokenURL string `json:"tokenURL"` // 令牌URL
Scopes []string `json:"scopes"` // 授权范围
RedirectURL string `json:"redirectURL"` // 重定向URL
UserURL string `json:"userURL"` // 用户信息URL
AccountField string `json:"accountField"` // 账号字段从用户信息中获取
}

View File

@@ -0,0 +1,150 @@
package repository
import (
"fmt"
"time"
"be.ems/src/framework/database/db"
"be.ems/src/framework/logger"
"be.ems/src/modules/system/model"
)
// NewSysLoginSource 实例化数据层
var NewSysLoginSource = &SysLoginSource{}
// SysLoginSource 认证源数据层处理
type SysLoginSource struct{}
// SelectByPage 分页查询集合
func (r SysLoginSource) SelectByPage(query map[string]string) ([]model.SysLoginSource, int64) {
tx := db.DB("").Model(&model.SysLoginSource{})
// 查询条件拼接
if v, ok := query["name"]; ok && v != "" {
tx = tx.Where("name like ?", v+"%")
}
if v, ok := query["type"]; ok && v != "" {
tx = tx.Where("type = ?", v)
}
if v, ok := query["beginTime"]; ok && v != "" {
if len(v) == 10 {
v = fmt.Sprintf("%s000", v)
}
tx = tx.Where("create_time >= ?", v)
}
if v, ok := query["endTime"]; ok && v != "" {
if len(v) == 10 {
v = fmt.Sprintf("%s999", v)
}
tx = tx.Where("create_time <= ?", v)
}
// 查询结果
var total int64 = 0
rows := []model.SysLoginSource{}
// 查询数量为0直接返回
if err := tx.Count(&total).Error; err != nil || total <= 0 {
return rows, total
}
// 查询数据分页
pageNum, pageSize := db.PageNumSize(query["pageNum"], query["pageSize"])
tx = tx.Limit(pageSize).Offset(pageSize * pageNum)
err := tx.Find(&rows).Error
if err != nil {
return rows, total
}
return rows, total
}
// Select 查询集合
func (r SysLoginSource) Select(param model.SysLoginSource) []model.SysLoginSource {
tx := db.DB("").Model(&model.SysLoginSource{})
// 查询条件拼接
if param.UID != "" {
tx = tx.Where("uid = ?", param.UID)
}
if param.Type != "" {
tx = tx.Where("type = ?", param.Type)
}
if param.Name != "" {
tx = tx.Where("name = ?", param.Name)
}
if param.ActiveFlag != "" {
tx = tx.Where("active_flag = ?", param.ActiveFlag)
}
// 查询数据
rows := []model.SysLoginSource{}
if err := tx.Find(&rows).Error; err != nil {
return rows
}
return rows
}
// SelectByIds 通过ID查询信息
func (r SysLoginSource) SelectByIds(ids []int64) []model.SysLoginSource {
rows := []model.SysLoginSource{}
if len(ids) <= 0 {
return rows
}
tx := db.DB("").Model(&model.SysLoginSource{})
// 构建查询条件
tx = tx.Where("id in ?", ids)
// 查询数据
if err := tx.Find(&rows).Error; err != nil {
logger.Errorf("query find err => %v", err.Error())
return rows
}
return rows
}
// Insert 新增信息 返回新增数据ID
func (r SysLoginSource) Insert(param model.SysLoginSource) int64 {
if param.CreateBy != "" {
ms := time.Now().UnixMilli()
param.UpdateBy = param.CreateBy
param.UpdateTime = ms
param.CreateTime = ms
}
// 执行插入
if err := db.DB("").Create(&param).Error; err != nil {
logger.Errorf("insert err => %v", err.Error())
return 0
}
return param.Id
}
// Update 修改信息 返回受影响行数
func (r SysLoginSource) Update(param model.SysLoginSource) int64 {
if param.Id <= 0 {
return 0
}
if param.UpdateBy != "" {
param.UpdateTime = time.Now().UnixMilli()
}
tx := db.DB("").Model(&model.SysLoginSource{})
// 构建查询条件
tx = tx.Where("id = ?", param.Id)
tx = tx.Omit("id", "create_by", "create_time")
// 执行更新
if err := tx.Updates(param).Error; err != nil {
logger.Errorf("update err => %v", err.Error())
return 0
}
return tx.RowsAffected
}
// DeleteByIds 批量删除信息 返回受影响行数
func (r SysLoginSource) DeleteByIds(ids []int64) int64 {
if len(ids) <= 0 {
return 0
}
tx := db.DB("").Where("id in ?", ids)
// 执行删除
if err := tx.Delete(&model.SysLoginSource{}).Error; err != nil {
logger.Errorf("delete err => %v", err.Error())
return 0
}
return tx.RowsAffected
}

View File

@@ -83,14 +83,15 @@ func (r SysMenu) Insert(sysMenu model.SysMenu) int64 {
}
// 根据菜单类型重置参数
if sysMenu.MenuType == constants.MENU_TYPE_BUTTON {
switch sysMenu.MenuType {
case constants.MENU_TYPE_BUTTON:
sysMenu.Component = ""
sysMenu.FrameFlag = "1"
sysMenu.CacheFlag = "1"
sysMenu.VisibleFlag = "1"
sysMenu.MenuPath = ""
sysMenu.Icon = "#"
} else if sysMenu.MenuType == constants.MENU_TYPE_DIR {
case constants.MENU_TYPE_DIR:
sysMenu.Component = ""
sysMenu.FrameFlag = "1"
sysMenu.CacheFlag = "1"
@@ -118,14 +119,15 @@ func (r SysMenu) Update(sysMenu model.SysMenu) int64 {
}
// 根据菜单类型重置参数
if sysMenu.MenuType == constants.MENU_TYPE_BUTTON {
switch sysMenu.MenuType {
case constants.MENU_TYPE_BUTTON:
sysMenu.Component = ""
sysMenu.FrameFlag = "1"
sysMenu.CacheFlag = "1"
sysMenu.VisibleFlag = "1"
sysMenu.MenuPath = ""
sysMenu.Icon = "#"
} else if sysMenu.MenuType == constants.MENU_TYPE_DIR {
case constants.MENU_TYPE_DIR:
sysMenu.Component = ""
sysMenu.FrameFlag = "1"
sysMenu.CacheFlag = "1"

View File

@@ -31,6 +31,12 @@ func (r SysUser) SelectByPage(query map[string]string, dataScopeSQL string) ([]m
if v, ok := query["phone"]; ok && v != "" {
tx = tx.Where("phone like ?", fmt.Sprintf("%s%%", v))
}
if v, ok := query["userType"]; ok && v != "" {
tx = tx.Where("user_type = ?", v)
}
if v, ok := query["userSource"]; ok && v != "" {
tx = tx.Where("user_source = ?", v)
}
if v, ok := query["statusFlag"]; ok && v != "" {
tx = tx.Where("status_flag = ?", v)
}
@@ -198,6 +204,12 @@ func (r SysUser) CheckUnique(sysUser model.SysUser) int64 {
if sysUser.Email != "" {
tx = tx.Where("email = ?", sysUser.Email)
}
if sysUser.UserType != "" {
tx = tx.Where("user_type = ?", sysUser.UserType)
}
if sysUser.UserSource != "" {
tx = tx.Where("user_source = ?", sysUser.UserSource)
}
// 查询数据
var id int64 = 0
@@ -209,14 +221,20 @@ func (r SysUser) CheckUnique(sysUser model.SysUser) int64 {
}
// SelectByUserName 通过登录账号查询信息
func (r SysUser) SelectByUserName(userName string) model.SysUser {
func (r SysUser) SelectByUserName(userName, userType, userSource string) model.SysUser {
item := model.SysUser{}
if userName == "" {
return item
}
if userType == "" {
userType = "System"
}
if userSource == "" {
userSource = "#"
}
tx := db.DB("").Model(&model.SysUser{})
// 构建查询条件
tx = tx.Where("user_name = ? and del_flag = '0'", userName)
tx = tx.Where("user_name = ? and user_type = ? and user_source = ? and del_flag = '0'", userName, userType, userSource)
// 查询数据
if err := tx.Limit(1).Find(&item).Error; err != nil {
logger.Errorf("query find err => %v", err.Error())

View File

@@ -0,0 +1,95 @@
package service
import (
"encoding/json"
"fmt"
"be.ems/src/framework/utils/generate"
"be.ems/src/modules/system/model"
"be.ems/src/modules/system/model/vo"
"be.ems/src/modules/system/repository"
)
// NewSysLoginSource 实例化服务层
var NewSysLoginSource = &SysLoginSource{
sysLoginSourceRepository: repository.NewSysLoginSource,
}
// SysLoginSource 认证源 服务层处理
type SysLoginSource struct {
sysLoginSourceRepository *repository.SysLoginSource // 认证源表
}
// FindByPage 分页查询
func (s SysLoginSource) FindByPage(query map[string]string) ([]model.SysLoginSource, int64) {
return s.sysLoginSourceRepository.SelectByPage(query)
}
// FindById 查询ID
func (s SysLoginSource) FindById(id int64) model.SysLoginSource {
rows := s.sysLoginSourceRepository.SelectByIds([]int64{id})
if len(rows) > 0 {
return rows[0]
}
return model.SysLoginSource{}
}
// Insert 新增
func (s SysLoginSource) Insert(param model.SysLoginSource) int64 {
param.UID = generate.Code(8)
return s.sysLoginSourceRepository.Insert(param)
}
// Update 更新
func (s SysLoginSource) Update(param model.SysLoginSource) int64 {
return s.sysLoginSourceRepository.Update(param)
}
// DeleteByIds 批量删除
func (s SysLoginSource) DeleteByIds(ids []int64) (int64, error) {
// 检查是否存在
arr := s.sysLoginSourceRepository.SelectByIds(ids)
if len(arr) <= 0 {
// return 0, fmt.Errorf("没有权限访问认证源数据!")
return 0, fmt.Errorf("no permission to access authentication source data")
}
if len(arr) == len(ids) {
return s.sysLoginSourceRepository.DeleteByIds(ids), nil
}
// return 0, fmt.Errorf("删除认证源信息失败!")
return 0, fmt.Errorf("failed to delete authentication source information")
}
// FindByActive 查询激活
func (s SysLoginSource) FindByActive(uid string) []model.SysLoginSource {
param := model.SysLoginSource{
ActiveFlag: "1",
}
if uid != "" {
param.UID = uid
}
return s.sysLoginSourceRepository.Select(param)
}
// CheckConfigJSON 检查配置JSON
func (s SysLoginSource) CheckConfigJSON(sType, sConfig string) (string, error) {
var source any
switch sType {
case "LDAP":
source = new(vo.SysLoginSourceLDAP)
case "SMTP":
source = new(vo.SysLoginSourceSMTP)
case "OAuth2":
source = new(vo.SysLoginSourceOAuth2)
default:
return "", fmt.Errorf("unsupported login source type: %s", sType)
}
if err := json.Unmarshal([]byte(sConfig), &source); err != nil {
return "", fmt.Errorf("config json format error for %s type: %s", sType, err.Error())
}
configByte, err := json.Marshal(source)
if err != nil {
return "", fmt.Errorf("config json format error")
}
return string(configByte), nil
}

View File

@@ -189,7 +189,9 @@ func (s SysUser) DeleteByIds(userIds []int64) (int64, error) {
// CheckUniqueByUserName 检查用户名称是否唯一
func (s SysUser) CheckUniqueByUserName(userName string, userId int64) bool {
uniqueId := s.sysUserRepository.CheckUnique(model.SysUser{
UserName: userName,
UserName: userName,
UserType: "System",
UserSource: "#",
})
if uniqueId == userId {
return true
@@ -200,7 +202,9 @@ func (s SysUser) CheckUniqueByUserName(userName string, userId int64) bool {
// CheckUniqueByPhone 检查手机号码是否唯一
func (s SysUser) CheckUniqueByPhone(phone string, userId int64) bool {
uniqueId := s.sysUserRepository.CheckUnique(model.SysUser{
Phone: phone,
Phone: phone,
UserType: "System",
UserSource: "#",
})
if uniqueId == userId {
return true
@@ -211,7 +215,9 @@ func (s SysUser) CheckUniqueByPhone(phone string, userId int64) bool {
// CheckUniqueByEmail 检查Email是否唯一
func (s SysUser) CheckUniqueByEmail(email string, userId int64) bool {
uniqueId := s.sysUserRepository.CheckUnique(model.SysUser{
Email: email,
Email: email,
UserType: "System",
UserSource: "#",
})
if uniqueId == userId {
return true
@@ -220,8 +226,10 @@ func (s SysUser) CheckUniqueByEmail(email string, userId int64) bool {
}
// FindByUserName 通过用户名查询用户信息
func (s SysUser) FindByUserName(userName string) model.SysUser {
userinfo := s.sysUserRepository.SelectByUserName(userName)
// userType 系统sys
// userSource 系统#
func (s SysUser) FindByUserName(userName, userType, userSource string) model.SysUser {
userinfo := s.sysUserRepository.SelectByUserName(userName, userType, userSource)
if userinfo.UserName != userName {
return userinfo
}

View File

@@ -429,6 +429,35 @@ func Setup(router *gin.Engine) {
controller.NewSysUser.Import,
)
}
// 第三方认证-配置认证源
sysLoginSource := controller.NewSysLoginSource
sysLoginSourceGroup := router.Group("/system/login-source")
{
sysLoginSourceGroup.GET("/list",
middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:list"}}),
sysLoginSource.List,
)
sysLoginSourceGroup.GET("/:id",
middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:query"}}),
sysLoginSource.Info,
)
sysLoginSourceGroup.POST("",
middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:add"}}),
middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLoginSource", middleware.BUSINESS_TYPE_INSERT)),
sysLoginSource.Add,
)
sysLoginSourceGroup.PUT("",
middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:edit"}}),
middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLoginSource", middleware.BUSINESS_TYPE_UPDATE)),
sysLoginSource.Edit,
)
sysLoginSourceGroup.DELETE("/:id",
middleware.AuthorizeUser(map[string][]string{"hasPerms": {"system:loginSource:remove"}}),
middleware.OperateLog(middleware.OptionNew("log.operate.title.sysLoginSource", middleware.BUSINESS_TYPE_DELETE)),
sysLoginSource.Remove,
)
}
}
// InitLoad 初始参数