diff --git a/packages/libs/lib-server/src/basic/base-controller.ts b/packages/libs/lib-server/src/basic/base-controller.ts
index 39cf55edf..23816ec09 100644
--- a/packages/libs/lib-server/src/basic/base-controller.ts
+++ b/packages/libs/lib-server/src/basic/base-controller.ts
@@ -69,10 +69,8 @@ export abstract class BaseController {
if (!projectIdStr){
projectIdStr = this.ctx.request.query["projectId"] as string;
}
- if (!projectIdStr){
- return null
- }
if (!projectIdStr) {
+ //这里必须抛异常,否则可能会有权限问题
throw new Error("projectId 不能为空")
}
const userId = this.getUserId()
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 fd635719e..87968bc5f 100644
--- a/packages/libs/lib-server/src/user/access/entity/access.ts
+++ b/packages/libs/lib-server/src/user/access/entity/access.ts
@@ -24,6 +24,9 @@ export class AccessEntity {
@Column({ name: 'project_id', comment: '项目id' })
projectId: number;
+ @Column({ comment: '权限等级', length: 100 })
+ level: string; // user common system
+
@Column({
name: 'create_time',
comment: '创建时间',
diff --git a/packages/ui/certd-client/src/api/service.ts b/packages/ui/certd-client/src/api/service.ts
index e42647448..a38d92c49 100644
--- a/packages/ui/certd-client/src/api/service.ts
+++ b/packages/ui/certd-client/src/api/service.ts
@@ -155,7 +155,7 @@ function createRequestFunction(service: any) {
}
Object.assign(configDefault, config);
- if (projectStore.isEnterprise && !config.url.startsWith("/sys") && !config.url.startsWith("http")) {
+ if (!configDefault.params.projectId && projectStore.isEnterprise && !config.url.startsWith("/sys") && !config.url.startsWith("http")) {
configDefault.params.projectId = projectStore.currentProject?.id;
}
return service(configDefault);
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 ac8499944..cee33d466 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
@@ -838,6 +838,7 @@ export default {
leaveFailed: "Leave project failed, please try again later",
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",
},
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 4e25f7878..e60b96e65 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
@@ -854,5 +854,6 @@ export default {
leaveFailed: "退出项目失败,请稍后重试",
applyJoinConfirm: "确认加入项目?",
leaveConfirm: "确认退出项目?",
+ viewDetail: "查看详情",
},
};
diff --git a/packages/ui/certd-client/src/router/guard.ts b/packages/ui/certd-client/src/router/guard.ts
index 12bc772bc..87c84506f 100644
--- a/packages/ui/certd-client/src/router/guard.ts
+++ b/packages/ui/certd-client/src/router/guard.ts
@@ -10,7 +10,9 @@ import { usePermissionStore } from "/@/plugin/permission/store.permission";
import util from "/@/plugin/permission/util.permission";
import { useUserStore } from "/@/store/user";
import { useProjectStore } from "../store/project";
-export const PROJECT_JOIN_PATH = "/certd/project/join";
+export const PROJECT_PATH_PREFIX = "/certd/project";
+export const SYS_PATH_PREFIX = "/sys";
+
function buildAccessedMenus(menus: any) {
if (menus == null) {
return;
@@ -131,10 +133,10 @@ function setupAccessGuard(router: Router) {
if (projectStore.isEnterprise) {
//加载我的项目
await projectStore.init();
- if (!projectStore.currentProject && to.path !== PROJECT_JOIN_PATH) {
+ if (!projectStore.currentProject && !to.path.startsWith(PROJECT_PATH_PREFIX) && !to.path.startsWith(SYS_PATH_PREFIX)) {
//没有项目
return {
- path: PROJECT_JOIN_PATH,
+ path: `${PROJECT_PATH_PREFIX}/join`,
replace: true,
};
}
diff --git a/packages/ui/certd-client/src/views/certd/project/detail/crud.tsx b/packages/ui/certd-client/src/views/certd/project/detail/crud.tsx
index 67a7a300c..c44ff5024 100644
--- a/packages/ui/certd-client/src/views/certd/project/detail/crud.tsx
+++ b/packages/ui/certd-client/src/views/certd/project/detail/crud.tsx
@@ -109,7 +109,10 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
search: {
show: true,
},
- form: {},
+ form: {
+ show: true,
+ rules: [{ required: true, message: "请选择用户" }],
+ },
editForm: {
show: false,
},
@@ -126,6 +129,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
},
form: {
show: true,
+ rules: [{ required: true, message: "请选择权限" }],
},
column: {
width: 200,
@@ -140,6 +144,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
},
form: {
show: true,
+ rules: [{ required: true, message: "请选择状态" }],
},
column: {
width: 200,
@@ -156,6 +161,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
id: row.id,
permission: row.permission,
onSubmit: async (form: any) => {
+ form.userId = row.userId;
await api.ApproveJoin(form);
crudExpose.doRefresh();
},
diff --git a/packages/ui/certd-client/src/views/certd/project/detail/index.vue b/packages/ui/certd-client/src/views/certd/project/detail/index.vue
index de9a125de..6358c644b 100644
--- a/packages/ui/certd-client/src/views/certd/project/detail/index.vue
+++ b/packages/ui/certd-client/src/views/certd/project/detail/index.vue
@@ -97,6 +97,10 @@ const handleBatchDelete = () => {
// 页面打开后获取列表数据
onMounted(async () => {
+ if (!projectId) {
+ message.error("您还未选择项目");
+ return;
+ }
await loadProjectDetail();
crudExpose.doRefresh();
});
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 9ed5a675a..2c19cd4ca 100644
--- a/packages/ui/certd-client/src/views/certd/project/join.vue
+++ b/packages/ui/certd-client/src/views/certd/project/join.vue
@@ -5,6 +5,10 @@
{{ t("certd.sysResources.projectJoin") }}
{{ t("certd.project.noProjectJoined") }}
+
+
+
{{ t("certd.project.projectManager") }}
+
{{ t("certd.project.projectList") }}
@@ -13,20 +17,20 @@
-
{{ project.name }}
-
{{ formatDate(project.createTime) }}
+
{{ project.name }}
+
管理员:
+
创建时间:{{ formatDate(project.createTime) }}
-
+
+
+ {{ t("certd.project.viewDetail") }}
+
{{ t("certd.project.applyJoin") }}
@@ -51,6 +55,8 @@ import { request } from "/src/api/service";
import { useProjectStore } from "/@/store/project";
import dayjs from "dayjs";
import { useDicts } from "../dicts";
+import { useRouter } from "vue-router";
+import { useUserStore } from "/@/store/user";
defineOptions({
name: "ProjectJoin",
@@ -62,6 +68,17 @@ const { projectMemberStatusDict, projectPermissionDict, userDict } = useDicts();
const projects = ref([]);
const projectStore = useProjectStore();
+const userStore = useUserStore();
+function goProjectManager() {
+ // 假设这里调用跳转到项目管理页的API
+ router.push(`/sys/enterprise/project`);
+}
+
+const router = useRouter();
+function goProjectDetail(projectId: number) {
+ // 假设这里调用跳转到项目详情页的API
+ router.push(`/certd/project/detail?projectId=${projectId}`);
+}
const getSystemProjects = async () => {
try {
@@ -147,7 +164,6 @@ async function leaveProject(projectId: number) {
.title {
font-size: 16px;
font-weight: bold;
- margin-bottom: 8px;
}
}
}
diff --git a/packages/ui/certd-client/src/views/sys/enterprise/project/detail/crud.tsx b/packages/ui/certd-client/src/views/sys/enterprise/project/detail/crud.tsx
index a29bdd507..720ff891d 100644
--- a/packages/ui/certd-client/src/views/sys/enterprise/project/detail/crud.tsx
+++ b/packages/ui/certd-client/src/views/sys/enterprise/project/detail/crud.tsx
@@ -108,7 +108,9 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
search: {
show: true,
},
- form: {},
+ form: {
+ rules: [{ required: true, message: "请选择用户" }],
+ },
editForm: {
show: false,
},
@@ -131,6 +133,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
},
form: {
show: true,
+ rules: [{ required: true, message: "请选择权限" }],
},
column: {
width: 200,
@@ -145,6 +148,7 @@ export default function ({ crudExpose, context }: CreateCrudOptionsProps): Creat
},
form: {
show: true,
+ rules: [{ required: true, message: "请选择状态" }],
},
column: {
width: 200,
diff --git a/packages/ui/certd-client/src/views/sys/enterprise/project/intro.vue b/packages/ui/certd-client/src/views/sys/enterprise/project/intro.vue
index f5de7ef65..077ffc7f4 100644
--- a/packages/ui/certd-client/src/views/sys/enterprise/project/intro.vue
+++ b/packages/ui/certd-client/src/views/sys/enterprise/project/intro.vue
@@ -5,8 +5,8 @@
{{ title || "管理模式介绍" }}
-
SaaS模式:每个用户管理自己的流水线和授权资源,独立使用。
-
企业模式:企业内部员工使用,通过项目合作管理流水线证书和授权资源。
+
SaaS模式:每个用户管理自己的流水线和授权资源,每个用户独立使用。
+
企业模式:通过项目合作管理流水线证书和授权资源,所有用户视为企业内部员工。
![]()
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 a3b10fc88..5cf066b4f 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
@@ -6,8 +6,10 @@
-
建议在开始使用时选择合适的模式,之后就不要随意切换了。
-
+
SaaS模式:每个用户管理自己的流水线和授权资源,独立使用。
+
企业模式:通过项目合作管理流水线证书和授权资源,所有用户视为企业内部员工。
+
建议在开始使用时固定一个合适的模式,之后就不要随意切换了。
+
diff --git a/packages/ui/certd-server/src/controller/sys/access/access-controller.ts b/packages/ui/certd-server/src/controller/sys/access/access-controller.ts
index 93d6e2e7a..d069c38a5 100644
--- a/packages/ui/certd-server/src/controller/sys/access/access-controller.ts
+++ b/packages/ui/certd-server/src/controller/sys/access/access-controller.ts
@@ -1,5 +1,5 @@
+import { AccessService } from "@certd/lib-server";
import { ALL, Body, Controller, Inject, Post, Provide, Query } from "@midwayjs/core";
-import { AccessService, Constants } from "@certd/lib-server";
import { AccessController } from "../../user/pipeline/access-controller.js";
/**
@@ -15,6 +15,12 @@ export class SysAccessController extends AccessController {
return this.service2;
}
+ async getProjectUserId(permission:string){
+ return {
+ projectId:null,userId:0
+ }
+ }
+
getUserId() {
// checkComm();
return 0;
@@ -54,7 +60,7 @@ export class SysAccessController extends AccessController {
return await super.define(type);
}
- @Post('/getSecretPlain', { summary: Constants.per.authOnly })
+ @Post('/getSecretPlain', { summary: 'sys:settings:view' })
async getSecretPlain(@Body(ALL) body: { id: number; key: string }) {
const value = await this.service.getById(body.id, 0);
return this.ok(value[body.key]);
@@ -69,4 +75,9 @@ export class SysAccessController extends AccessController {
async simpleInfo(@Query('id') id: number) {
return await super.simpleInfo(id);
}
+
+ @Post('/getDictByIds', { summary: 'sys:settings:view' })
+ async getDictByIds(@Body('ids') ids: number[]) {
+ return await super.getDictByIds(ids);
+ }
}
diff --git a/packages/ui/certd-server/src/controller/sys/addon/addon-controller.ts b/packages/ui/certd-server/src/controller/sys/addon/addon-controller.ts
index bd5864237..804460142 100644
--- a/packages/ui/certd-server/src/controller/sys/addon/addon-controller.ts
+++ b/packages/ui/certd-server/src/controller/sys/addon/addon-controller.ts
@@ -12,6 +12,11 @@ export class SysAddonController extends AddonController {
return this.service2;
}
+ async getProjectUserId(permission:string){
+ return {
+ projectId:null,userId:0
+ }
+ }
getUserId() {
// checkComm();
return 0;
diff --git a/packages/ui/certd-server/src/controller/sys/enterprise/project-member-controller.ts b/packages/ui/certd-server/src/controller/sys/enterprise/project-member-controller.ts
index e03815450..8ce7e236c 100644
--- a/packages/ui/certd-server/src/controller/sys/enterprise/project-member-controller.ts
+++ b/packages/ui/certd-server/src/controller/sys/enterprise/project-member-controller.ts
@@ -60,10 +60,12 @@ export class SysProjectMemberController extends CrudController
userId: this.getUserId(),
projectId: projectId,
});
- return super.update({
+ const res = await this.service.update({
id: bean.id,
permission: bean.permission,
+ status: bean.status,
});
+
+ return this.ok(res);
}
@Post("/info", { summary: Constants.per.authOnly })
diff --git a/packages/ui/certd-server/src/controller/user/pipeline/access-controller.ts b/packages/ui/certd-server/src/controller/user/pipeline/access-controller.ts
index e5dfcecd3..19d42d7bd 100644
--- a/packages/ui/certd-server/src/controller/user/pipeline/access-controller.ts
+++ b/packages/ui/certd-server/src/controller/user/pipeline/access-controller.ts
@@ -111,7 +111,7 @@ export class AccessController extends CrudController {
@Post('/simpleInfo', { summary: Constants.per.authOnly })
async simpleInfo(@Query('id') id: number) {
// await this.authService.checkUserIdButAllowAdmin(this.ctx, this.service, id);
- await this.checkOwner(this.getService(), id, "read",true);
+ // await this.checkOwner(this.getService(), id, "read",true);
const res = await this.service.getSimpleInfo(id);
return this.ok(res);
}