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") }} -
{{ t("certd.dualStackNetworkHelper") }}, {{ t("certd.helpDocLink") }}
+
+ {{ t("certd.dualStackNetworkHelper") }}, {{ t("certd.helpDocLink") }} +
@@ -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; +}