From e59816aba47fe13797a9a503cd57e6c47c027eb0 Mon Sep 17 00:00:00 2001 From: archer <545436317@qq.com> Date: Fri, 30 May 2025 18:11:16 +0800 Subject: [PATCH] fix: ux --- .../global/support/permission/app/constant.ts | 4 +-- .../support/permission/app/controller.ts | 1 + .../global/support/permission/controller.ts | 13 ++++++++- packages/global/support/permission/type.d.ts | 2 +- .../service/support/permission/app/auth.ts | 2 +- .../MemberManager/PermissionSelect.tsx | 27 +++++++++++-------- projects/app/src/pages/api/core/chat/init.ts | 2 +- .../service/support/permission/auth/chat.ts | 2 +- 8 files changed, 35 insertions(+), 18 deletions(-) diff --git a/packages/global/support/permission/app/constant.ts b/packages/global/support/permission/app/constant.ts index 8dd2e468f..e5120b945 100644 --- a/packages/global/support/permission/app/constant.ts +++ b/packages/global/support/permission/app/constant.ts @@ -37,13 +37,13 @@ export const AppPermissionList: PermissionListType = { name: '门户快捷应用权限', description: '', value: GateQuickAppPermission, - checkBoxType: 'multiple' // TODO: 加个隐藏选项 + checkBoxType: 'hiden' }, [AppPermissionKeyEnum.featuredGate]: { name: '门户推荐应用权限', description: '', value: GateFeaturedAppPermission, - checkBoxType: 'multiple' // TODO: 加个隐藏选项 + checkBoxType: 'hiden' } }; diff --git a/packages/global/support/permission/app/controller.ts b/packages/global/support/permission/app/controller.ts index 1b471a643..76ba42e74 100644 --- a/packages/global/support/permission/app/controller.ts +++ b/packages/global/support/permission/app/controller.ts @@ -11,6 +11,7 @@ export class AppPermission extends Permission { } else if (!props?.per) { props.per = AppDefaultPermissionVal; } + props.permissionList = AppPermissionList; super(props); this.setUpdatePermissionCallback(() => { this.hasReadPer = this.checkPer(AppPermissionList.read.value); diff --git a/packages/global/support/permission/controller.ts b/packages/global/support/permission/controller.ts index 347c9409b..793ef266b 100644 --- a/packages/global/support/permission/controller.ts +++ b/packages/global/support/permission/controller.ts @@ -1,5 +1,10 @@ import { type PermissionListType, type PermissionValueType } from './type'; -import { PermissionList, NullPermission, OwnerPermissionVal } from './constant'; +import { + PermissionList, + NullPermission, + OwnerPermissionVal, + ManagePermissionVal +} from './constant'; export type PerConstructPros = { per?: PermissionValueType; @@ -63,6 +68,12 @@ export class Permission { if (perm === OwnerPermissionVal) { return this.value === OwnerPermissionVal; } + + // 管理员 + if ((this.value & ManagePermissionVal) === ManagePermissionVal) { + return (this._permissionList.manage.value & perm) === perm; + } + return (this.value & perm) === perm; } diff --git a/packages/global/support/permission/type.d.ts b/packages/global/support/permission/type.d.ts index 5facd4187..cc3bd2b27 100644 --- a/packages/global/support/permission/type.d.ts +++ b/packages/global/support/permission/type.d.ts @@ -18,7 +18,7 @@ export type PermissionListType = Record< name: string; description: string; value: PermissionValueType; - checkBoxType: 'single' | 'multiple'; + checkBoxType: 'single' | 'multiple' | 'hiden'; } >; diff --git a/packages/service/support/permission/app/auth.ts b/packages/service/support/permission/app/auth.ts index 8f0bd1332..79a3db63d 100644 --- a/packages/service/support/permission/app/auth.ts +++ b/packages/service/support/permission/app/auth.ts @@ -137,7 +137,7 @@ export const authApp = async ({ appId: ParentIdType; per: PermissionValueType; }): Promise< - AuthResponseType & { + AuthResponseType & { app: AppDetailType; } > => { diff --git a/projects/app/src/components/support/permission/MemberManager/PermissionSelect.tsx b/projects/app/src/components/support/permission/MemberManager/PermissionSelect.tsx index 3d5989aa2..327aa514f 100644 --- a/projects/app/src/components/support/permission/MemberManager/PermissionSelect.tsx +++ b/projects/app/src/components/support/permission/MemberManager/PermissionSelect.tsx @@ -83,7 +83,7 @@ function PermissionSelect({ const selectedSingleValue = useMemo(() => { if (!permissionList) return undefined; - const per = new Permission({ per: value }); + const per = new Permission({ per: value, permissionList }); if (per.hasManagePer) return permissionList['manage'].value; if (per.hasWritePer) return permissionList['write'].value; @@ -91,18 +91,18 @@ function PermissionSelect({ return permissionList['read'].value; }, [permissionList, value]); const selectedMultipleValues = useMemo(() => { - const per = new Permission({ per: value }); + const per = new Permission({ per: value, permissionList }); return permissionSelectList.multipleCheckBoxList .filter((item) => { return per.checkPer(item.value); }) .map((item) => item.value); - }, [permissionSelectList.multipleCheckBoxList, value]); + }, [permissionList, permissionSelectList.multipleCheckBoxList, value]); const onSelectPer = (perValue: PermissionValueType) => { if (perValue === value) return; - const per = new Permission({ per: perValue }); + const per = new Permission({ per: perValue, permissionList }); per.addPer(...selectedMultipleValues); onChange(per.value); }; @@ -157,7 +157,7 @@ function PermissionSelect({ {/* The list of single select permissions */} {permissionSelectList.singleCheckBoxList.map((item) => { const change = () => { - const per = new Permission({ per: value }); + const per = new Permission({ per: value, permissionList }); per.removePer(selectedSingleValue); per.addPer(item.value); onSelectPer(per.value); @@ -191,12 +191,13 @@ function PermissionSelect({ {permissionSelectList.multipleCheckBoxList.map((item) => { const isChecked = selectedMultipleValues.includes(item.value); - const isDisabled = new Permission({ per: selectedSingleValue }).checkPer( - item.value - ); + const isDisabled = new Permission({ + per: selectedSingleValue, + permissionList + }).checkPer(item.value); const change = () => { if (isDisabled) return; - const per = new Permission({ per: value }); + const per = new Permission({ per: value, permissionList }); if (isChecked) { per.removePer(item.value); } else { @@ -221,14 +222,18 @@ function PermissionSelect({ : { cursor: 'pointer' })} + onClick={change} > { + // e.stopPropagation(); + // e.preventDefault(); + // }} isDisabled={isDisabled} /> - + {t(item.name as any)} {t(item.description as any)} diff --git a/projects/app/src/pages/api/core/chat/init.ts b/projects/app/src/pages/api/core/chat/init.ts index 24ad3fbc7..cff983542 100644 --- a/projects/app/src/pages/api/core/chat/init.ts +++ b/projects/app/src/pages/api/core/chat/init.ts @@ -38,7 +38,7 @@ async function handler( ]); // auth chat permission - if (chat && !app.permission.hasManagePer && String(tmbId) !== String(chat?.tmbId)) { + if (chat && !app.permission.hasLogPer && String(tmbId) !== String(chat?.tmbId)) { return Promise.reject(ChatErrEnum.unAuthChat); } diff --git a/projects/app/src/service/support/permission/auth/chat.ts b/projects/app/src/service/support/permission/auth/chat.ts index d8d76ec7f..e474b495c 100644 --- a/projects/app/src/service/support/permission/auth/chat.ts +++ b/projects/app/src/service/support/permission/auth/chat.ts @@ -170,7 +170,7 @@ export async function authChatCrud({ }; if (String(teamId) !== String(chat.teamId)) return Promise.reject(ChatErrEnum.unAuthChat); - if (permission.hasManagePer) + if (permission.hasLogPer) return { teamId, tmbId,