From cbb436cfbe056cffbe9bee3f752dc1bc519a9e20 Mon Sep 17 00:00:00 2001 From: moonrailgun Date: Mon, 27 Feb 2023 15:21:24 +0800 Subject: [PATCH] feat: add permission for deleteMessage --- client/shared/utils/role-helper.ts | 8 ++++++++ .../ChatMessageList/useChatMessageItemAction.tsx | 8 +++++++- server/packages/sdk/src/services/lib/role.ts | 1 + server/services/core/chat/message.service.ts | 13 +++++++++---- 4 files changed, 25 insertions(+), 5 deletions(-) diff --git a/client/shared/utils/role-helper.ts b/client/shared/utils/role-helper.ts index e41ac1c4..9f201f95 100644 --- a/client/shared/utils/role-helper.ts +++ b/client/shared/utils/role-helper.ts @@ -44,6 +44,7 @@ export const PERMISSION = { managePanel: 'core.managePanel', manageInvite: 'core.manageInvite', manageRoles: 'core.manageRoles', + deleteMessage: 'core.deleteMessage', }, }; @@ -107,6 +108,13 @@ export const getPermissionList = (): PermissionItemType[] => [ default: false, required: [PERMISSION.core.groupDetail], }, + { + key: PERMISSION.core.deleteMessage, + title: t('删除消息'), + desc: t('允许删除用户信息'), + default: false, + required: [PERMISSION.core.groupDetail], + }, ]; /** diff --git a/client/web/src/components/ChatBox/ChatMessageList/useChatMessageItemAction.tsx b/client/web/src/components/ChatBox/ChatMessageList/useChatMessageItemAction.tsx index a111796a..224e0260 100644 --- a/client/web/src/components/ChatBox/ChatMessageList/useChatMessageItemAction.tsx +++ b/client/web/src/components/ChatBox/ChatMessageList/useChatMessageItemAction.tsx @@ -4,12 +4,14 @@ import React, { useCallback } from 'react'; import { ChatMessage, deleteMessage, + PERMISSION, recallMessage, sharedEvent, t, useAsyncRequest, useChatBoxContext, useGroupInfoContext, + useHasGroupPermission, useUserInfo, } from 'tailchat-shared'; import { openReconfirmModalP } from '@/components/Modal'; @@ -27,6 +29,10 @@ export function useChatMessageItemAction( const context = useChatBoxContext(); const groupInfo = useGroupInfoContext(); const userInfo = useUserInfo(); + const [hasDeleteMessagePermission] = useHasGroupPermission( + groupInfo?._id ?? '', + [PERMISSION.core.deleteMessage] + ); const handleCopy = useCallback(() => { copy(getMessageTextDecorators().serialize(payload.content)); @@ -68,7 +74,7 @@ export function useChatMessageItemAction( icon: , onClick: handleRecallMessage, }, - isGroupOwner && { + hasDeleteMessagePermission && { key: 'delete', label: t('删除'), danger: true, diff --git a/server/packages/sdk/src/services/lib/role.ts b/server/packages/sdk/src/services/lib/role.ts index 0f6677d1..8b1eb5c7 100644 --- a/server/packages/sdk/src/services/lib/role.ts +++ b/server/packages/sdk/src/services/lib/role.ts @@ -13,6 +13,7 @@ export const PERMISSION = { managePanel: 'core.managePanel', manageInvite: 'core.manageInvite', manageRoles: 'core.manageRoles', + deleteMessage: 'core.deleteMessage', }, }; diff --git a/server/services/core/chat/message.service.ts b/server/services/core/chat/message.service.ts index a6672398..c2d5c2cb 100644 --- a/server/services/core/chat/message.service.ts +++ b/server/services/core/chat/message.service.ts @@ -11,6 +11,8 @@ import { TcContext, DataNotFoundError, NoPermissionError, + call, + PERMISSION, } from 'tailchat-server-sdk'; import type { Group } from '../../../models/group/group'; import { isValidStr } from '../../../lib/utils'; @@ -296,10 +298,13 @@ class MessageService extends TcService { throw new Error(t('无法删除私人信息')); } - const group: GroupBaseInfo = await ctx.call('group.getGroupBasicInfo', { - groupId: String(groupId), - }); - if (String(group.owner) !== userId) { + const [hasPermission] = await call(ctx).checkUserPermissions( + String(groupId), + userId, + [PERMISSION.core.deleteMessage] + ); + + if (!hasPermission) { throw new NoPermissionError(t('没有删除权限')); // 仅管理员允许删除 }