From 4925d5a5e7d2065a3f5b1e82f6a0ab454a07629f Mon Sep 17 00:00:00 2001 From: xiaojunnuo Date: Sun, 8 Mar 2026 00:48:29 +0800 Subject: [PATCH] chore: project prerelease --- .../src/locales/langs/en-US/certd.ts | 1 + .../src/locales/langs/zh-CN/certd.ts | 1 + .../src/views/certd/project/join.vue | 2 +- .../src/views/sys/settings/tabs/mode.vue | 1 + packages/ui/certd-server/.env.dev-mysql.yaml | 2 +- .../db/migration-mysql/v10038__admin_mode.sql | 118 ++++++++++++++++++ .../db/migration-pg/v10038__admin_mode.sql | 116 +++++++++++++++++ .../db/migration/v10038__admin_mode.sql | 2 +- .../sys/enterprise/service/project-service.ts | 5 +- 9 files changed, 244 insertions(+), 4 deletions(-) create mode 100644 packages/ui/certd-server/db/migration-mysql/v10038__admin_mode.sql create mode 100644 packages/ui/certd-server/db/migration-pg/v10038__admin_mode.sql diff --git a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts index 4c8394bfe..4d72810aa 100644 --- a/packages/ui/certd-client/src/locales/langs/en-US/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/en-US/certd.ts @@ -843,6 +843,7 @@ export default { applyJoinConfirm: "Are you sure you want to apply to join this project?", leaveConfirm: "Are you sure you want to leave this project?", viewDetail: "View Detail", + projectManage: "Project Manage", }, addonSelector: { select: "Select", diff --git a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts index 030759015..6a15e954a 100644 --- a/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts +++ b/packages/ui/certd-client/src/locales/langs/zh-CN/certd.ts @@ -858,5 +858,6 @@ export default { applyJoinConfirm: "确认加入项目?", leaveConfirm: "确认退出项目?", viewDetail: "查看详情", + projectManage: "项目管理", }, }; diff --git a/packages/ui/certd-client/src/views/certd/project/join.vue b/packages/ui/certd-client/src/views/certd/project/join.vue index 2c19cd4ca..c8539b8b3 100644 --- a/packages/ui/certd-client/src/views/certd/project/join.vue +++ b/packages/ui/certd-client/src/views/certd/project/join.vue @@ -7,7 +7,7 @@
- {{ t("certd.project.projectManager") }} + {{ t("certd.project.projectManage") }}
diff --git a/packages/ui/certd-client/src/views/sys/settings/tabs/mode.vue b/packages/ui/certd-client/src/views/sys/settings/tabs/mode.vue index 5cf066b4f..ee466d074 100644 --- a/packages/ui/certd-client/src/views/sys/settings/tabs/mode.vue +++ b/packages/ui/certd-client/src/views/sys/settings/tabs/mode.vue @@ -9,6 +9,7 @@
SaaS模式:每个用户管理自己的流水线和授权资源,独立使用。
企业模式:通过项目合作管理流水线证书和授权资源,所有用户视为企业内部员工。
建议在开始使用时固定一个合适的模式,之后就不要随意切换了。
+
商业版不建议设置为企业模式,除非你确定要转成企业内部使用
更多管理模式介绍
diff --git a/packages/ui/certd-server/.env.dev-mysql.yaml b/packages/ui/certd-server/.env.dev-mysql.yaml index f54421169..99dbb0d62 100644 --- a/packages/ui/certd-server/.env.dev-mysql.yaml +++ b/packages/ui/certd-server/.env.dev-mysql.yaml @@ -6,7 +6,7 @@ typeorm: default: type: mysql # mariadb host: localhost - port: 3309 + port: 3308 username: root password: root database: certd diff --git a/packages/ui/certd-server/db/migration-mysql/v10038__admin_mode.sql b/packages/ui/certd-server/db/migration-mysql/v10038__admin_mode.sql new file mode 100644 index 000000000..9bb2a1cb7 --- /dev/null +++ b/packages/ui/certd-server/db/migration-mysql/v10038__admin_mode.sql @@ -0,0 +1,118 @@ + +CREATE TABLE `cd_project` +( + `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL, + `user_id` bigint NOT NULL, + `name` varchar(512) NOT NULL, + `admin_id` bigint NOT NULL, + `disabled` boolean NOT NULL DEFAULT false, + `is_system` boolean NOT NULL DEFAULT false, + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); + + +CREATE INDEX `index_project_user_id` ON `cd_project` (`user_id`); +CREATE INDEX `index_project_admin_id` ON `cd_project` (`admin_id`); +INSERT INTO cd_project (id, user_id, `admin_id`, `name`, `disabled`, `is_system`) VALUES (1, -1, 1,'default', false,false); + +ALTER TABLE cd_cert_info ADD COLUMN project_id bigint; +CREATE INDEX `index_cert_project_id` ON `cd_cert_info` (`project_id`); + +ALTER TABLE cd_site_info ADD COLUMN project_id bigint; +CREATE INDEX `index_site_project_id` ON `cd_site_info` (`project_id`); + +ALTER TABLE cd_site_ip ADD COLUMN project_id bigint; +CREATE INDEX `index_site_ip_project_id` ON `cd_site_ip` (`project_id`); + +ALTER TABLE cd_open_key ADD COLUMN project_id bigint; +CREATE INDEX `index_open_key_project_id` ON `cd_open_key` (`project_id`); + +ALTER TABLE cd_access ADD COLUMN project_id bigint; +CREATE INDEX `index_access_project_id` ON `cd_access` (`project_id`); + +ALTER TABLE cd_addon ADD COLUMN project_id bigint; +CREATE INDEX `index_addon_project_id` ON `cd_addon` (`project_id`); + +ALTER TABLE pi_pipeline ADD COLUMN project_id bigint; +CREATE INDEX `index_pipeline_project_id` ON `pi_pipeline` (`project_id`); + +ALTER TABLE pi_pipeline_group ADD COLUMN project_id bigint; +CREATE INDEX `index_pipeline_group_project_id` ON `pi_pipeline_group` (`project_id`); + +ALTER TABLE pi_storage ADD COLUMN project_id bigint; +CREATE INDEX `index_storage_project_id` ON `pi_storage` (`project_id`); + +ALTER TABLE pi_notification ADD COLUMN project_id bigint; +CREATE INDEX `index_notification_project_id` ON `pi_notification` (`project_id`); + +ALTER TABLE pi_history ADD COLUMN project_id bigint; +CREATE INDEX `index_history_project_id` ON `pi_history` (`project_id`); + +ALTER TABLE pi_history_log ADD COLUMN project_id bigint; +CREATE INDEX `index_history_log_project_id` ON `pi_history_log` (`project_id`); + +ALTER TABLE pi_template ADD COLUMN project_id bigint; +CREATE INDEX `index_template_project_id` ON `pi_template` (`project_id`); + +ALTER TABLE pi_sub_domain ADD COLUMN project_id bigint; +CREATE INDEX `index_sub_domain_project_id` ON `pi_sub_domain` (`project_id`); + +ALTER TABLE cd_cname_record ADD COLUMN project_id bigint; +CREATE INDEX `index_cname_record_project_id` ON `cd_cname_record` (`project_id`); + +ALTER TABLE cd_domain ADD COLUMN project_id bigint; +CREATE INDEX `index_domain_project_id` ON `cd_domain` (`project_id`); + +ALTER TABLE user_settings ADD COLUMN project_id bigint; +CREATE INDEX `index_user_settings_project_id` ON `user_settings` (`project_id`); + +ALTER TABLE cd_group ADD COLUMN project_id bigint; +CREATE INDEX `index_group_project_id` ON `cd_group` (`project_id`); + + + + +CREATE TABLE `cd_project_member` +( + `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL, + `user_id` bigint NOT NULL, + `project_id` bigint NOT NULL, + `permission` varchar(128) NOT NULL DEFAULT 'read', + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); + +ALTER TABLE cd_project_member ADD COLUMN status varchar(128); + +CREATE INDEX `index_project_member_user_id` ON `cd_project_member` (`user_id`); +CREATE INDEX `index_project_member_project_id` ON `cd_project_member` (`project_id`); + + +CREATE TABLE `cd_audit_log` +( + `id` bigint PRIMARY KEY AUTO_INCREMENT NOT NULL, + `user_id` bigint NOT NULL, + `username` varchar(128) NOT NULL, + `project_id` bigint NOT NULL, + `project_name` varchar(512) NOT NULL, + `type` varchar(128) NOT NULL, + `action` varchar(128) NOT NULL DEFAULT 'read', + `content` longtext NOT NULL, + `ip_address` varchar(128) NOT NULL, + `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, + `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP +); + + +CREATE INDEX `index_audit_log_user_id` ON `cd_audit_log` (`user_id`); +CREATE INDEX `index_audit_log_project_id` ON `cd_audit_log` (`project_id`); + + + +ALTER TABLE cd_site_info ADD COLUMN ip_address varchar(128); + + +ALTER TABLE `cd_project` ENGINE = InnoDB; +ALTER TABLE `cd_project_member` ENGINE = InnoDB; +ALTER TABLE `cd_audit_log` ENGINE = InnoDB; \ No newline at end of file diff --git a/packages/ui/certd-server/db/migration-pg/v10038__admin_mode.sql b/packages/ui/certd-server/db/migration-pg/v10038__admin_mode.sql new file mode 100644 index 000000000..f1c798876 --- /dev/null +++ b/packages/ui/certd-server/db/migration-pg/v10038__admin_mode.sql @@ -0,0 +1,116 @@ + +CREATE TABLE "cd_project" +( + "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + "user_id" bigint NOT NULL, + "name" varchar(512) NOT NULL, + "admin_id" bigint NOT NULL, + "disabled" boolean NOT NULL DEFAULT (false), + "is_system" boolean NOT NULL DEFAULT (false), + "create_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), + "update_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) +); + + +CREATE INDEX "index_project_user_id" ON "cd_project" ("user_id"); +CREATE INDEX "index_project_admin_id" ON "cd_project" ("admin_id"); +INSERT INTO cd_project (id, user_id, "admin_id", "name", "disabled", "is_system") VALUES (1, -1, 1,'default', false,false); +select setval('cd_project_id_seq', 1); + + +ALTER TABLE cd_cert_info ADD COLUMN project_id bigint; +CREATE INDEX "index_cert_project_id" ON "cd_cert_info" ("project_id"); + +ALTER TABLE cd_site_info ADD COLUMN project_id bigint; +CREATE INDEX "index_site_project_id" ON "cd_site_info" ("project_id"); + +ALTER TABLE cd_site_ip ADD COLUMN project_id bigint; +CREATE INDEX "index_site_ip_project_id" ON "cd_site_ip" ("project_id"); + +ALTER TABLE cd_open_key ADD COLUMN project_id bigint; +CREATE INDEX "index_open_key_project_id" ON "cd_open_key" ("project_id"); + +ALTER TABLE cd_access ADD COLUMN project_id bigint; +CREATE INDEX "index_access_project_id" ON "cd_access" ("project_id"); + +ALTER TABLE cd_addon ADD COLUMN project_id bigint; +CREATE INDEX "index_addon_project_id" ON "cd_addon" ("project_id"); + +ALTER TABLE pi_pipeline ADD COLUMN project_id bigint; +CREATE INDEX "index_pipeline_project_id" ON "pi_pipeline" ("project_id"); + +ALTER TABLE pi_pipeline_group ADD COLUMN project_id bigint; +CREATE INDEX "index_pipeline_group_project_id" ON "pi_pipeline_group" ("project_id"); + +ALTER TABLE pi_storage ADD COLUMN project_id bigint; +CREATE INDEX "index_storage_project_id" ON "pi_storage" ("project_id"); + +ALTER TABLE pi_notification ADD COLUMN project_id bigint; +CREATE INDEX "index_notification_project_id" ON "pi_notification" ("project_id"); + +ALTER TABLE pi_history ADD COLUMN project_id bigint; +CREATE INDEX "index_history_project_id" ON "pi_history" ("project_id"); + +ALTER TABLE pi_history_log ADD COLUMN project_id bigint; +CREATE INDEX "index_history_log_project_id" ON "pi_history_log" ("project_id"); + +ALTER TABLE pi_template ADD COLUMN project_id bigint; +CREATE INDEX "index_template_project_id" ON "pi_template" ("project_id"); + +ALTER TABLE pi_sub_domain ADD COLUMN project_id bigint; +CREATE INDEX "index_sub_domain_project_id" ON "pi_sub_domain" ("project_id"); + +ALTER TABLE cd_cname_record ADD COLUMN project_id bigint; +CREATE INDEX "index_cname_record_project_id" ON "cd_cname_record" ("project_id"); + +ALTER TABLE cd_domain ADD COLUMN project_id bigint; +CREATE INDEX "index_domain_project_id" ON "cd_domain" ("project_id"); + +ALTER TABLE user_settings ADD COLUMN project_id bigint; +CREATE INDEX "index_user_settings_project_id" ON "user_settings" ("project_id"); + +ALTER TABLE cd_group ADD COLUMN project_id bigint; +CREATE INDEX "index_group_project_id" ON "cd_group" ("project_id"); + + + + +CREATE TABLE "cd_project_member" +( + "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + "user_id" bigint NOT NULL, + "project_id" bigint NOT NULL, + "permission" varchar(128) NOT NULL DEFAULT ('read'), + "create_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), + "update_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) +); + +ALTER TABLE cd_project_member ADD COLUMN status varchar(128); + +CREATE INDEX "index_project_member_user_id" ON "cd_project_member" ("user_id"); +CREATE INDEX "index_project_member_project_id" ON "cd_project_member" ("project_id"); + + +CREATE TABLE "cd_audit_log" +( + "id" bigint PRIMARY KEY GENERATED BY DEFAULT AS IDENTITY NOT NULL, + "user_id" bigint NOT NULL, + "username" varchar(128) NOT NULL, + "project_id" bigint NOT NULL, + "project_name" varchar(512) NOT NULL, + "type" varchar(128) NOT NULL, + "action" varchar(128) NOT NULL DEFAULT ('read'), + "content" text NOT NULL, + "ip_address" varchar(128) NOT NULL, + "create_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP), + "update_time" timestamp NOT NULL DEFAULT (CURRENT_TIMESTAMP) +); + + +CREATE INDEX "index_audit_log_user_id" ON "cd_audit_log" ("user_id"); +CREATE INDEX "index_audit_log_project_id" ON "cd_audit_log" ("project_id"); + + + +ALTER TABLE cd_site_info ADD COLUMN ip_address varchar(128); + diff --git a/packages/ui/certd-server/db/migration/v10038__admin_mode.sql b/packages/ui/certd-server/db/migration/v10038__admin_mode.sql index 4111cae61..2543808ee 100644 --- a/packages/ui/certd-server/db/migration/v10038__admin_mode.sql +++ b/packages/ui/certd-server/db/migration/v10038__admin_mode.sql @@ -14,7 +14,7 @@ CREATE TABLE "cd_project" CREATE INDEX "index_project_user_id" ON "cd_project" ("user_id"); CREATE INDEX "index_project_admin_id" ON "cd_project" ("admin_id"); -INSERT INTO cd_project (id, user_id, "admin_id", "name", "disabled") VALUES (1, -1, 1,'default', false,false); +INSERT INTO cd_project (id, user_id, "admin_id", "name", "disabled", "is_system") VALUES (1, -1, 1,'default', false,false); ALTER TABLE cd_cert_info ADD COLUMN project_id integer; CREATE INDEX "index_cert_project_id" ON "cd_cert_info" ("project_id"); diff --git a/packages/ui/certd-server/src/modules/sys/enterprise/service/project-service.ts b/packages/ui/certd-server/src/modules/sys/enterprise/service/project-service.ts index e594020e4..e10b85779 100644 --- a/packages/ui/certd-server/src/modules/sys/enterprise/service/project-service.ts +++ b/packages/ui/certd-server/src/modules/sys/enterprise/service/project-service.ts @@ -69,7 +69,10 @@ export class ProjectService extends BaseService { async getUserProjects(userId: number) { const memberList = await this.projectMemberService.getByUserId(userId, 'approved'); - const projectIds = memberList.map(item => item.projectId); + let projectIds = memberList.map(item => item.projectId); + if (!projectIds || projectIds.length === 0) { + projectIds = [0] + } const projectList = await this.repository.createQueryBuilder('project') .where(' project.disabled = false') .where(' project.userId = :userId', { userId: ENTERPRISE_USER_ID })