diff --git a/packages/libs/lib-server/src/system/settings/service/models.ts b/packages/libs/lib-server/src/system/settings/service/models.ts
index 1b9a8128d..69eb81a6f 100644
--- a/packages/libs/lib-server/src/system/settings/service/models.ts
+++ b/packages/libs/lib-server/src/system/settings/service/models.ts
@@ -65,6 +65,8 @@ export class SysPublicSettings extends BaseSettings {
}> = {};
notice?: string;
+
+ adminMode?: "enterprise" | "saas" = "saas";
}
export class SysPrivateSettings extends BaseSettings {
diff --git a/packages/libs/lib-server/src/user/access/entity/access.ts b/packages/libs/lib-server/src/user/access/entity/access.ts
index d69128c72..fd635719e 100644
--- a/packages/libs/lib-server/src/user/access/entity/access.ts
+++ b/packages/libs/lib-server/src/user/access/entity/access.ts
@@ -21,6 +21,9 @@ export class AccessEntity {
@Column({ name: 'encrypt_setting', comment: '已加密设置', length: 10240, nullable: true })
encryptSetting: string;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({
name: 'create_time',
comment: '创建时间',
diff --git a/packages/libs/lib-server/src/user/addon/entity/addon.ts b/packages/libs/lib-server/src/user/addon/entity/addon.ts
index 4d16fb43b..438de2237 100644
--- a/packages/libs/lib-server/src/user/addon/entity/addon.ts
+++ b/packages/libs/lib-server/src/user/addon/entity/addon.ts
@@ -28,6 +28,9 @@ export class AddonEntity {
@Column({ name: 'is_default', comment: '是否默认', nullable: false, default: false })
isDefault: boolean;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({
name: 'create_time',
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 b1daa1bf4..96d6a2323 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
@@ -861,4 +861,8 @@ export default {
select: "Select",
placeholder: "select please",
},
+ adminMode: {
+ enterpriseMode: "Enterprise Mode",
+ saasMode: "SaaS Mode",
+ },
};
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 d12f92ff6..34d78c3dd 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
@@ -876,4 +876,8 @@ export default {
select: "选择",
placeholder: "请选择",
},
+ adminMode: {
+ enterpriseMode: "企业模式",
+ saasMode: "SaaS模式",
+ },
};
diff --git a/packages/ui/certd-client/src/store/settings/api.basic.ts b/packages/ui/certd-client/src/store/settings/api.basic.ts
index 48a0012fb..57003d3fb 100644
--- a/packages/ui/certd-client/src/store/settings/api.basic.ts
+++ b/packages/ui/certd-client/src/store/settings/api.basic.ts
@@ -86,6 +86,9 @@ export type SysPublicSetting = {
>;
// 系统通知
notice?: string;
+
+ // 管理员模式
+ adminMode?: "enterprise" | "saas";
};
export type SuiteSetting = {
enabled?: boolean;
diff --git a/packages/ui/certd-client/src/views/sys/settings/index.vue b/packages/ui/certd-client/src/views/sys/settings/index.vue
index 962d75c8d..6c62109f5 100644
--- a/packages/ui/certd-client/src/views/sys/settings/index.vue
+++ b/packages/ui/certd-client/src/views/sys/settings/index.vue
@@ -26,6 +26,9 @@
+
+
+
@@ -39,6 +42,8 @@ import SettingSafe from "/@/views/sys/settings/tabs/safe.vue";
import SettingCaptcha from "/@/views/sys/settings/tabs/captcha.vue";
import SettingPipeline from "/@/views/sys/settings/tabs/pipeline.vue";
import SettingOauth from "/@/views/sys/settings/tabs/oauth.vue";
+import SettingMode from "/@/views/sys/settings/tabs/mode.vue";
+
import { useRoute, useRouter } from "vue-router";
import { ref } from "vue";
import { useSettingStore } from "/@/store/settings";
diff --git a/packages/ui/certd-client/src/views/sys/settings/tabs/base.vue b/packages/ui/certd-client/src/views/sys/settings/tabs/base.vue
index 4b2b92189..9ff248372 100644
--- a/packages/ui/certd-client/src/views/sys/settings/tabs/base.vue
+++ b/packages/ui/certd-client/src/views/sys/settings/tabs/base.vue
@@ -34,7 +34,9 @@
{{ t("certd.ipv4Priority") }}
{{ t("certd.ipv6Priority") }}
-
+
@@ -68,8 +70,6 @@ import { useSettingStore } from "/@/store/settings";
import { notification } from "ant-design-vue";
import { util } from "/@/utils";
import { useI18n } from "/src/locales";
-import AddonSelector from "../../../certd/addon/addon-selector/index.vue";
-import CaptchaInput from "/@/components/captcha/captcha-input.vue";
const { t } = useI18n();
defineOptions({
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
new file mode 100644
index 000000000..4bd95d147
--- /dev/null
+++ b/packages/ui/certd-client/src/views/sys/settings/tabs/mode.vue
@@ -0,0 +1,67 @@
+
+
+
+
+
+
diff --git a/packages/ui/certd-server/db/migration/v10038__admin_mode.sql b/packages/ui/certd-server/db/migration/v10038__admin_mode.sql
new file mode 100644
index 000000000..0e5249168
--- /dev/null
+++ b/packages/ui/certd-server/db/migration/v10038__admin_mode.sql
@@ -0,0 +1,53 @@
+
+CREATE TABLE "cd_project"
+(
+ "id" integer PRIMARY KEY AUTOINCREMENT NOT NULL,
+ "user_id" integer NOT NULL,
+ "name" varchar(512) NOT NULL,
+ "disabled" boolean NOT NULL DEFAULT (false),
+ "create_time" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP),
+ "update_time" datetime NOT NULL DEFAULT (CURRENT_TIMESTAMP)
+);
+
+
+CREATE INDEX "index_project_user_id" ON "cd_project" ("user_id");
+INSERT INTO cd_project (id, user_id, "name", "disabled") VALUES (1, 0, 'default', false);
+
+
+ALTER TABLE cd_cert_info ADD COLUMN project_id integer;
+CREATE INDEX "index_cert_project_id" ON "cd_cert_info" ("project_id");
+
+ALTER TABLE cd_site_info ADD COLUMN project_id integer;
+CREATE INDEX "index_site_project_id" ON "cd_site_info" ("project_id");
+
+ALTER TABLE cd_site_ip ADD COLUMN project_id integer;
+CREATE INDEX "index_site_ip_project_id" ON "cd_site_ip" ("project_id");
+
+ALTER TABLE cd_open_key ADD COLUMN project_id integer;
+CREATE INDEX "index_open_key_project_id" ON "cd_open_key" ("project_id");
+
+ALTER TABLE cd_access ADD COLUMN project_id integer;
+CREATE INDEX "index_access_project_id" ON "cd_access" ("project_id");
+
+ALTER TABLE cd_addon ADD COLUMN project_id integer;
+CREATE INDEX "index_addon_project_id" ON "cd_addon" ("project_id");
+
+ALTER TABLE pi_pipeline ADD COLUMN project_id integer;
+CREATE INDEX "index_pipeline_project_id" ON "cd_pipeline" ("project_id");
+
+ALTER TABLE pi_pipeline_group ADD COLUMN project_id integer;
+CREATE INDEX "index_pipeline_group_project_id" ON "cd_pipeline_group" ("project_id");
+
+ALTER TABLE pi_storage ADD COLUMN project_id integer;
+CREATE INDEX "index_storage_project_id" ON "cd_storage" ("project_id");
+
+ALTER TABLE pi_notification ADD COLUMN project_id integer;
+CREATE INDEX "index_notification_project_id" ON "cd_notification" ("project_id");
+
+ALTER TABLE pi_history ADD COLUMN project_id integer;
+CREATE INDEX "index_history_project_id" ON "cd_history" ("project_id");
+
+ALTER TABLE pi_history_log ADD COLUMN project_id integer;
+CREATE INDEX "index_history_log_project_id" ON "cd_history_log" ("project_id");
+
+
diff --git a/packages/ui/certd-server/src/modules/monitor/entity/cert-info.ts b/packages/ui/certd-server/src/modules/monitor/entity/cert-info.ts
index 807489c91..1f1234ffb 100644
--- a/packages/ui/certd-server/src/modules/monitor/entity/cert-info.ts
+++ b/packages/ui/certd-server/src/modules/monitor/entity/cert-info.ts
@@ -42,6 +42,9 @@ export class CertInfoEntity {
@Column({ name: 'cert_file', comment: '证书下载' })
certFile: string;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({
name: 'create_time',
comment: '创建时间',
diff --git a/packages/ui/certd-server/src/modules/monitor/entity/site-info.ts b/packages/ui/certd-server/src/modules/monitor/entity/site-info.ts
index 298ffe193..4535f49b3 100644
--- a/packages/ui/certd-server/src/modules/monitor/entity/site-info.ts
+++ b/packages/ui/certd-server/src/modules/monitor/entity/site-info.ts
@@ -71,6 +71,9 @@ export class SiteInfoEntity {
@Column({ name: 'group_id', comment: '分组id' })
groupId: number;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' })
createTime: Date;
@Column({ name: 'update_time', comment: '修改时间', default: () => 'CURRENT_TIMESTAMP' })
diff --git a/packages/ui/certd-server/src/modules/monitor/entity/site-ip.ts b/packages/ui/certd-server/src/modules/monitor/entity/site-ip.ts
index 3cfa50c3f..91887f815 100644
--- a/packages/ui/certd-server/src/modules/monitor/entity/site-ip.ts
+++ b/packages/ui/certd-server/src/modules/monitor/entity/site-ip.ts
@@ -33,6 +33,8 @@ export class SiteIpEntity {
remark: string;
@Column({ name: "disabled", comment: "禁用启用" })
disabled: boolean;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
@Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' })
createTime: Date;
diff --git a/packages/ui/certd-server/src/modules/open/entity/open-key.ts b/packages/ui/certd-server/src/modules/open/entity/open-key.ts
index 6c774ce3d..1e8fe0614 100644
--- a/packages/ui/certd-server/src/modules/open/entity/open-key.ts
+++ b/packages/ui/certd-server/src/modules/open/entity/open-key.ts
@@ -17,6 +17,9 @@ export class OpenKeyEntity {
@Column({ name: 'scope', comment: '权限范围' })
scope: string; // open 仅开放接口、 user 用户所有权限
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({ name: 'create_time', comment: '创建时间', default: () => 'CURRENT_TIMESTAMP' })
createTime: Date;
diff --git a/packages/ui/certd-server/src/modules/pipeline/entity/history-log.ts b/packages/ui/certd-server/src/modules/pipeline/entity/history-log.ts
index bdeeeeaf9..0f2425b88 100644
--- a/packages/ui/certd-server/src/modules/pipeline/entity/history-log.ts
+++ b/packages/ui/certd-server/src/modules/pipeline/entity/history-log.ts
@@ -25,6 +25,9 @@ export class HistoryLogEntity {
@Column({ comment: '日志内容', length: 40960, nullable: true })
logs: string;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({
name: 'create_time',
comment: '创建时间',
diff --git a/packages/ui/certd-server/src/modules/pipeline/entity/history.ts b/packages/ui/certd-server/src/modules/pipeline/entity/history.ts
index 6461b28f2..5fb7aa2b7 100644
--- a/packages/ui/certd-server/src/modules/pipeline/entity/history.ts
+++ b/packages/ui/certd-server/src/modules/pipeline/entity/history.ts
@@ -26,6 +26,9 @@ export class HistoryEntity {
})
endTime: Date;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({
name: 'create_time',
comment: '创建时间',
@@ -38,6 +41,7 @@ export class HistoryEntity {
default: () => 'CURRENT_TIMESTAMP',
})
updateTime: Date;
+
pipelineTitle: string;
diff --git a/packages/ui/certd-server/src/modules/pipeline/entity/notification.ts b/packages/ui/certd-server/src/modules/pipeline/entity/notification.ts
index 555c4e884..e66404150 100644
--- a/packages/ui/certd-server/src/modules/pipeline/entity/notification.ts
+++ b/packages/ui/certd-server/src/modules/pipeline/entity/notification.ts
@@ -20,6 +20,9 @@ export class NotificationEntity {
@Column({ name: 'is_default', comment: '是否默认' })
isDefault: boolean;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({
name: 'create_time',
comment: '创建时间',
diff --git a/packages/ui/certd-server/src/modules/pipeline/entity/pipeline-group.ts b/packages/ui/certd-server/src/modules/pipeline/entity/pipeline-group.ts
index 8ee07ed7d..31d1003cc 100644
--- a/packages/ui/certd-server/src/modules/pipeline/entity/pipeline-group.ts
+++ b/packages/ui/certd-server/src/modules/pipeline/entity/pipeline-group.ts
@@ -17,6 +17,9 @@ export class PipelineGroupEntity {
@Column({ name: 'favorite', comment: '收藏' })
favorite: boolean;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({
name: 'create_time',
comment: '创建时间',
diff --git a/packages/ui/certd-server/src/modules/pipeline/entity/pipeline.ts b/packages/ui/certd-server/src/modules/pipeline/entity/pipeline.ts
index 4f1d0d4be..168b77b49 100644
--- a/packages/ui/certd-server/src/modules/pipeline/entity/pipeline.ts
+++ b/packages/ui/certd-server/src/modules/pipeline/entity/pipeline.ts
@@ -61,6 +61,9 @@ export class PipelineEntity {
@Column({name: 'order', comment: '排序', nullable: true,})
order: number;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({name: 'create_time',comment: '创建时间', default: () => 'CURRENT_TIMESTAMP',})
createTime: Date;
@Column({
diff --git a/packages/ui/certd-server/src/modules/pipeline/entity/storage.ts b/packages/ui/certd-server/src/modules/pipeline/entity/storage.ts
index d01eb9bf2..aa87e1d15 100644
--- a/packages/ui/certd-server/src/modules/pipeline/entity/storage.ts
+++ b/packages/ui/certd-server/src/modules/pipeline/entity/storage.ts
@@ -23,6 +23,9 @@ export class StorageEntity {
@Column({ comment: 'value', length: 40960, nullable: true })
value: string;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({
name: 'create_time',
comment: '创建时间',
diff --git a/packages/ui/certd-server/src/modules/pipeline/entity/template.ts b/packages/ui/certd-server/src/modules/pipeline/entity/template.ts
index 418d09101..bb31b641f 100644
--- a/packages/ui/certd-server/src/modules/pipeline/entity/template.ts
+++ b/packages/ui/certd-server/src/modules/pipeline/entity/template.ts
@@ -39,6 +39,9 @@ export class TemplateEntity {
})
order: number;
+ @Column({ name: 'project_id', comment: '项目id' })
+ projectId: number;
+
@Column({
name: 'create_time',
comment: '创建时间',
diff --git a/packages/ui/certd-server/src/modules/sys/audit/entity/audit-log.ts b/packages/ui/certd-server/src/modules/sys/audit/entity/audit-log.ts
new file mode 100644
index 000000000..3e5361240
--- /dev/null
+++ b/packages/ui/certd-server/src/modules/sys/audit/entity/audit-log.ts
@@ -0,0 +1,43 @@
+import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
+
+/**
+ */
+@Entity('cd_audit_log')
+export class AuditLogEntity {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column({ name: 'user_id', comment: 'UserId' })
+ userId: number;
+
+ @Column({ name: 'user_name', comment: '用户名' })
+ userName: string;
+
+ @Column({ name: 'project_id', comment: 'ProjectId' })
+ projectId: number;
+
+ @Column({ name: 'project_name', comment: '项目名称' })
+ projectName: string;
+
+ @Column({ name: 'action', comment: '操作' })
+ action: string;
+
+ @Column({ name: 'content', comment: '内容' })
+ content: string;
+
+ @Column({ name: 'ip_address', comment: 'IP地址' })
+ ipAddress: string;
+
+ @Column({
+ name: 'create_time',
+ comment: '创建时间',
+ default: () => 'CURRENT_TIMESTAMP',
+ })
+ createTime: Date;
+ @Column({
+ name: 'update_time',
+ comment: '修改时间',
+ default: () => 'CURRENT_TIMESTAMP',
+ })
+ updateTime: Date;
+}
diff --git a/packages/ui/certd-server/src/modules/sys/enterprise/entity/project-user.ts b/packages/ui/certd-server/src/modules/sys/enterprise/entity/project-user.ts
new file mode 100644
index 000000000..c58bf5ccd
--- /dev/null
+++ b/packages/ui/certd-server/src/modules/sys/enterprise/entity/project-user.ts
@@ -0,0 +1,31 @@
+import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
+
+/**
+ */
+@Entity('cd_project_user')
+export class ProjectUserEntity {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column({ name: 'user_id', comment: 'UserId' })
+ userId: number;
+
+ @Column({ name: 'project_id', comment: 'ProjectId' })
+ projectId: number;
+
+ @Column({ name: 'permission', comment: '权限' })
+ permission: string; // read / write
+
+ @Column({
+ name: 'create_time',
+ comment: '创建时间',
+ default: () => 'CURRENT_TIMESTAMP',
+ })
+ createTime: Date;
+ @Column({
+ name: 'update_time',
+ comment: '修改时间',
+ default: () => 'CURRENT_TIMESTAMP',
+ })
+ updateTime: Date;
+}
diff --git a/packages/ui/certd-server/src/modules/sys/enterprise/entity/project.ts b/packages/ui/certd-server/src/modules/sys/enterprise/entity/project.ts
new file mode 100644
index 000000000..f41dce77d
--- /dev/null
+++ b/packages/ui/certd-server/src/modules/sys/enterprise/entity/project.ts
@@ -0,0 +1,31 @@
+import { Column, Entity, PrimaryGeneratedColumn } from 'typeorm';
+
+/**
+ */
+@Entity('cd_project')
+export class ProjectEntity {
+ @PrimaryGeneratedColumn()
+ id: number;
+
+ @Column({ name: 'user_id', comment: 'UserId' })
+ userId: number;
+
+ @Column({ name: 'name', comment: '项目名称' })
+ name: string;
+
+ @Column({ name: 'disabled', comment: '禁用' })
+ disabled: boolean;
+
+ @Column({
+ name: 'create_time',
+ comment: '创建时间',
+ default: () => 'CURRENT_TIMESTAMP',
+ })
+ createTime: Date;
+ @Column({
+ name: 'update_time',
+ comment: '修改时间',
+ default: () => 'CURRENT_TIMESTAMP',
+ })
+ updateTime: Date;
+}