feat: 新增第三方登录认证和管理
This commit is contained in:
@@ -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
|
||||
-- ----------------------------
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
@@ -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, '');
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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');
|
||||
|
||||
33
build/database/lite/install/sys_login_source.sql
Normal file
33
build/database/lite/install/sys_login_source.sql
Normal 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
|
||||
-- ----------------------------
|
||||
@@ -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, '');
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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, '');
|
||||
|
||||
@@ -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
|
||||
);
|
||||
|
||||
@@ -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, '');
|
||||
|
||||
|
||||
54
build/database/lite/upgrade/upg_sys_dict_type.sql
Normal file
54
build/database/lite/upgrade/upg_sys_dict_type.sql
Normal 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, '');
|
||||
@@ -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');
|
||||
|
||||
32
build/database/lite/upgrade/upg_sys_login_source.sql
Normal file
32
build/database/lite/upgrade/upg_sys_login_source.sql
Normal 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
|
||||
-- ----------------------------
|
||||
@@ -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, '');
|
||||
|
||||
@@ -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);
|
||||
|
||||
46
build/database/lite/upgrade/upg_sys_user.sql
Normal file
46
build/database/lite/upgrade/upg_sys_user.sql
Normal 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";
|
||||
@@ -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;
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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');
|
||||
|
||||
24
build/database/std/install/sys_login_source.sql
Normal file
24
build/database/std/install/sys_login_source.sql
Normal 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
|
||||
@@ -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, '');
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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';
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
@@ -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');
|
||||
|
||||
@@ -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');
|
||||
|
||||
23
build/database/std/upgrade/upg_sys_login_source.sql
Normal file
23
build/database/std/upgrade/upg_sys_login_source.sql
Normal 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
|
||||
@@ -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, '');
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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,
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
@@ -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))
|
||||
}
|
||||
|
||||
93
src/modules/auth/controller/account_info.go
Normal file
93
src/modules/auth/controller/account_info.go
Normal 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))
|
||||
}
|
||||
80
src/modules/auth/controller/account_ldap.go
Normal file
80
src/modules/auth/controller/account_ldap.go
Normal 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))
|
||||
}
|
||||
107
src/modules/auth/controller/account_oauth2.go
Normal file
107
src/modules/auth/controller/account_oauth2.go
Normal 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))
|
||||
}
|
||||
80
src/modules/auth/controller/account_smtp.go
Normal file
80
src/modules/auth/controller/account_smtp.go
Normal 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))
|
||||
}
|
||||
104
src/modules/auth/controller/account_system.go
Normal file
104
src/modules/auth/controller/account_system.go
Normal 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))
|
||||
}
|
||||
@@ -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 验证码唯一标识
|
||||
}
|
||||
|
||||
22
src/modules/auth/model/login_source_vo.go
Normal file
22
src/modules/auth/model/login_source_vo.go
Normal 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 状态-认证源唯一标识
|
||||
}
|
||||
@@ -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 标记用户类型
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
}
|
||||
|
||||
36
src/modules/auth/service/account_info.go
Normal file
36
src/modules/auth/service/account_info.go
Normal 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
|
||||
}
|
||||
108
src/modules/auth/service/account_ldap.go
Normal file
108
src/modules/auth/service/account_ldap.go
Normal 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
|
||||
}
|
||||
168
src/modules/auth/service/account_oauth2.go
Normal file
168
src/modules/auth/service/account_oauth2.go
Normal 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
|
||||
}
|
||||
88
src/modules/auth/service/account_smtp.go
Normal file
88
src/modules/auth/service/account_smtp.go
Normal 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
|
||||
}
|
||||
138
src/modules/auth/service/account_sysstem.go
Normal file
138
src/modules/auth/service/account_sysstem.go
Normal 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
|
||||
}
|
||||
@@ -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", // 创建来源
|
||||
}
|
||||
|
||||
// 新增用户的角色管理
|
||||
|
||||
@@ -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
|
||||
@@ -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"]
|
||||
|
||||
22
src/modules/system/model/sys_login_source.go
Normal file
22
src/modules/system/model/sys_login_source.go
Normal 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"
|
||||
}
|
||||
@@ -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"` // 密码更新时间
|
||||
|
||||
28
src/modules/system/model/vo/login_source.go
Normal file
28
src/modules/system/model/vo/login_source.go
Normal 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 DN(dc=example,dc=org)
|
||||
UserFilter string `json:"userFilter"` // 用户过滤规则((&(objectClass=organizationalPerson)(uid=%s)))
|
||||
BindDN string `json:"bindDN"` // 绑定 DN(cn=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"` // 账号字段从用户信息中获取
|
||||
}
|
||||
150
src/modules/system/repository/sys_login_source.go
Normal file
150
src/modules/system/repository/sys_login_source.go
Normal 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(¶m).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
|
||||
}
|
||||
@@ -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"
|
||||
|
||||
@@ -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())
|
||||
|
||||
95
src/modules/system/service/sys_login_source.go
Normal file
95
src/modules/system/service/sys_login_source.go
Normal 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
|
||||
}
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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 初始参数
|
||||
|
||||
Reference in New Issue
Block a user