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 @@
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 })