From bdedf49a712dde4793211356d40842561f5b9942 Mon Sep 17 00:00:00 2001 From: wangdan-fit2cloud Date: Tue, 17 Jun 2025 16:11:07 +0800 Subject: [PATCH] feat: system --- ui/src/api/user/resource-authorization.ts | 9 +- ui/src/api/workspace/role.ts | 30 +++++ ui/src/components/app-icon/index.ts | 1 - ui/src/router/modules/system.ts | 10 +- ui/src/utils/permission-api.ts | 28 +++++ .../component/PermissionSetting.vue | 4 +- .../views/role/component/AddMemberDrawer.vue | 3 +- ui/src/views/role/index.vue | 107 ++++++++++-------- ui/vite.config.ts | 2 +- 9 files changed, 134 insertions(+), 60 deletions(-) create mode 100644 ui/src/api/workspace/role.ts create mode 100644 ui/src/utils/permission-api.ts diff --git a/ui/src/api/user/resource-authorization.ts b/ui/src/api/user/resource-authorization.ts index 078d0154e..f5c027aab 100644 --- a/ui/src/api/user/resource-authorization.ts +++ b/ui/src/api/user/resource-authorization.ts @@ -12,13 +12,12 @@ Object.defineProperty(prefix, 'value', { }, }) - /** * 获取成员列表 * @query 参数 */ const getUserList: (loading?: Ref) => Promise> = (loading) => { - return get(`${prefix}/user_list`, undefined, loading) + return get(`${prefix.value}/user_list`, undefined, loading) } /** @@ -29,7 +28,7 @@ const getResourceAuthorization: ( user_id: string, loading?: Ref, ) => Promise> = (user_id, loading) => { - return get(`${prefix}/user_resource_permission/user/${user_id}`, undefined, loading) + return get(`${prefix.value}/user_resource_permission/user/${user_id}`, undefined, loading) } /** @@ -55,10 +54,10 @@ const putResourceAuthorization: ( body: any, loading?: Ref, ) => Promise> = (user_id, body, loading) => { - return put(`${prefix}/user_resource_permission/user/${user_id}`, body, loading) + return put(`${prefix.value}/user_resource_permission/user/${user_id}`, body, loading) } const getUserMember: (loading?: Ref) => Promise> = (loading) => { - return get(`${prefix}/user_member`, undefined, loading) + return get(`${prefix.value}/user_member`, undefined, loading) } export default { getResourceAuthorization, diff --git a/ui/src/api/workspace/role.ts b/ui/src/api/workspace/role.ts new file mode 100644 index 000000000..9d091fbd2 --- /dev/null +++ b/ui/src/api/workspace/role.ts @@ -0,0 +1,30 @@ +import { get, post, del } from '@/request/index' +import type { Ref } from 'vue' +import { Result } from '@/request/Result' +import type { RoleItem, RolePermissionItem, CreateOrUpdateParams, RoleMemberItem, CreateMemberParamsItem } from '@/api/type/role' +import { RoleTypeEnum } from '@/enums/system' +import type { pageRequest, PageList } from '@/api/type/common' + +const prefix = '/workspace/role' +/** + * 获取角色列表 + */ +const getRoleList: (loading?: Ref) => Promise> = (loading) => { + return get(`${prefix}`, undefined, loading) +} + +/** + * 新建角色成员 + */ +const CreateMember: ( + role_id: string, + data: { members: CreateMemberParamsItem[] }, + loading?: Ref, +) => Promise> = (role_id, data, loading) => { + return post(`${prefix}/${role_id}/add_member`, data, undefined, loading) +} + +export default { + getRoleList, + CreateMember, +} diff --git a/ui/src/components/app-icon/index.ts b/ui/src/components/app-icon/index.ts index a9c939f2e..eaf5b0eb9 100644 --- a/ui/src/components/app-icon/index.ts +++ b/ui/src/components/app-icon/index.ts @@ -166,4 +166,3 @@ export const iconMap: any = { // 动态加载的图标 ...dynamicIcons, } -console.log(iconMap); diff --git a/ui/src/router/modules/system.ts b/ui/src/router/modules/system.ts index 113d36dc1..4c4786793 100644 --- a/ui/src/router/modules/system.ts +++ b/ui/src/router/modules/system.ts @@ -1,4 +1,4 @@ -import { Role, ComplexPermission } from '@/utils/permission/type' +import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data' const systemRouter = { path: '/system', name: 'system', @@ -42,6 +42,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', + permission: [EditionConst.IS_EE], }, component: () => import('@/views/role/index.vue'), }, @@ -55,6 +56,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', + permission: [EditionConst.IS_EE], }, component: () => import('@/views/workspace/index.vue'), }, @@ -68,6 +70,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', + permission: [EditionConst.IS_EE], }, children: [ { @@ -115,6 +118,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', + permission: [EditionConst.IS_PE, EditionConst.IS_EE], }, children: [ { @@ -172,7 +176,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', - //permission: new ComplexPermission(['ADMIN'], ['x-pack'], 'AND') + permission: [EditionConst.IS_PE, EditionConst.IS_EE], }, component: () => import('@/views/theme/index.vue'), }, @@ -184,7 +188,7 @@ const systemRouter = { activeMenu: '/system', parentPath: '/system', parentName: 'system', - //permission: new ComplexPermission(['ADMIN'], ['x-pack'], 'AND') + permission: [EditionConst.IS_PE, EditionConst.IS_EE], }, component: () => import('@/views/authentication/index.vue'), }, diff --git a/ui/src/utils/permission-api.ts b/ui/src/utils/permission-api.ts new file mode 100644 index 000000000..c800199b8 --- /dev/null +++ b/ui/src/utils/permission-api.ts @@ -0,0 +1,28 @@ +import { PermissionConst, EditionConst, RoleConst } from '@/utils/permission/data' +import { hasPermission } from '@/utils/permission/index' +import roleSystemApi from '@/api/system/role' +import roleWorkspaceApi from '@/api/workspace/role' + +// 系统管理员 API +const systemApiMap = { + role: roleSystemApi, +} as any + +// 企业版工作空间管理员 API +const workspaceApiMap = { + role: roleWorkspaceApi, +} as any + +/** 动态导入 API 模块的函数 + * loadPermissionApi('role') + */ + +export function loadPermissionApi(type: string) { + if (hasPermission([EditionConst.IS_EE, RoleConst.WORKSPACE_MANAGE.getWorkspaceRole], 'AND')) { + // 加载企业版工作空间管理员 API + return workspaceApiMap[type] + } else { + // 加载系统管理员 API + return systemApiMap[type] + } +} diff --git a/ui/src/views/resource-authorization/component/PermissionSetting.vue b/ui/src/views/resource-authorization/component/PermissionSetting.vue index fdd5a6a35..001c7675d 100644 --- a/ui/src/views/resource-authorization/component/PermissionSetting.vue +++ b/ui/src/views/resource-authorization/component/PermissionSetting.vue @@ -22,13 +22,13 @@ ({ user_ids: item.user_ids, workspace_ids: ['None'] })) } - await RoleApi.CreateMember( + await loadPermissionApi('role').CreateMember( props.currentRole?.id as string, { members: params ?? list.value }, loading, diff --git a/ui/src/views/role/index.vue b/ui/src/views/role/index.vue index b4eec77a8..3baf93a1d 100644 --- a/ui/src/views/role/index.vue +++ b/ui/src/views/role/index.vue @@ -5,23 +5,30 @@
- +
{{ $t('views.role.internalRole') }}
- +