fix: 修复私人会话没有权限检查的问题

release/desktop
moonrailgun 3 years ago
parent 1706af2423
commit fbc071ba2e

@ -19,7 +19,9 @@
}, },
"pnpm": { "pnpm": {
"peerDependencyRules": { "peerDependencyRules": {
"ignoreMissing": ["acorn"] "ignoreMissing": [
"acorn"
]
} }
}, },
"lint-staged": { "lint-staged": {
@ -57,5 +59,9 @@
"prettier": "^2.3.2", "prettier": "^2.3.2",
"typescript": "^4.5.2", "typescript": "^4.5.2",
"vinyl-fs": "^3.0.3" "vinyl-fs": "^3.0.3"
},
"dependencies": {
"crc": "^3.8.0",
"lodash": "^4.17.21"
} }
} }

@ -11,6 +11,7 @@ importers:
'@typescript-eslint/eslint-plugin': ^4.28.1 '@typescript-eslint/eslint-plugin': ^4.28.1
'@typescript-eslint/parser': ^4.28.1 '@typescript-eslint/parser': ^4.28.1
commitlint: ^12.1.4 commitlint: ^12.1.4
crc: ^3.8.0
dayjs: ^1.10.6 dayjs: ^1.10.6
esbuild: ^0.12.25 esbuild: ^0.12.25
eslint: ^7.30.0 eslint: ^7.30.0
@ -23,9 +24,13 @@ importers:
i18next-scanner: ^3.0.0 i18next-scanner: ^3.0.0
identity-obj-proxy: ^3.0.0 identity-obj-proxy: ^3.0.0
lint-staged: ^11.0.0 lint-staged: ^11.0.0
lodash: ^4.17.21
prettier: ^2.3.2 prettier: ^2.3.2
typescript: ^4.5.2 typescript: ^4.5.2
vinyl-fs: ^3.0.3 vinyl-fs: ^3.0.3
dependencies:
crc: 3.8.0
lodash: 4.17.21
devDependencies: devDependencies:
'@commitlint/cli': 12.1.4 '@commitlint/cli': 12.1.4
'@commitlint/config-conventional': 12.1.4 '@commitlint/config-conventional': 12.1.4
@ -5379,6 +5384,9 @@ packages:
engines: {node: '>=4.8.2'} engines: {node: '>=4.8.2'}
peerDependencies: peerDependencies:
acorn: ^6 || ^7 || ^8 acorn: ^6 || ^7 || ^8
peerDependenciesMeta:
acorn:
optional: true
dependencies: dependencies:
acorn: 8.7.1 acorn: 8.7.1
acorn-private-class-elements: 0.2.7_acorn@8.7.1 acorn-private-class-elements: 0.2.7_acorn@8.7.1
@ -5388,6 +5396,9 @@ packages:
resolution: {integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==} resolution: {integrity: sha512-d3OEjQV4ROpoflsnUA8HozoIR504TFxNivYEUi6uwz0IYhBkTDXGuWlNdMtybRt3nqVx/L6XqMt0FxkXuWKZhw==}
peerDependencies: peerDependencies:
acorn: ^6.0.0 acorn: ^6.0.0
peerDependenciesMeta:
acorn:
optional: true
dependencies: dependencies:
acorn: 8.7.1 acorn: 8.7.1
dev: true dev: true
@ -5411,6 +5422,9 @@ packages:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies: peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
acorn:
optional: true
dependencies: dependencies:
acorn: 7.4.1 acorn: 7.4.1
dev: true dev: true
@ -5419,6 +5433,9 @@ packages:
resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
peerDependencies: peerDependencies:
acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
peerDependenciesMeta:
acorn:
optional: true
dependencies: dependencies:
acorn: 8.7.1 acorn: 8.7.1
dev: true dev: true
@ -5436,6 +5453,9 @@ packages:
engines: {node: '>=4.8.2'} engines: {node: '>=4.8.2'}
peerDependencies: peerDependencies:
acorn: ^6.1.0 || ^7 || ^8 acorn: ^6.1.0 || ^7 || ^8
peerDependenciesMeta:
acorn:
optional: true
dependencies: dependencies:
acorn: 8.7.1 acorn: 8.7.1
dev: true dev: true
@ -5445,6 +5465,9 @@ packages:
engines: {node: '>=4.8.2'} engines: {node: '>=4.8.2'}
peerDependencies: peerDependencies:
acorn: ^6 || ^7 || ^8 acorn: ^6 || ^7 || ^8
peerDependenciesMeta:
acorn:
optional: true
dependencies: dependencies:
acorn: 8.7.1 acorn: 8.7.1
acorn-private-class-elements: 0.2.7_acorn@8.7.1 acorn-private-class-elements: 0.2.7_acorn@8.7.1
@ -5455,6 +5478,9 @@ packages:
engines: {node: '>=4.8.2'} engines: {node: '>=4.8.2'}
peerDependencies: peerDependencies:
acorn: ^7.4 || ^8 acorn: ^7.4 || ^8
peerDependenciesMeta:
acorn:
optional: true
dependencies: dependencies:
acorn: 8.7.1 acorn: 8.7.1
acorn-class-fields: 0.3.7_acorn@8.7.1 acorn-class-fields: 0.3.7_acorn@8.7.1
@ -5467,6 +5493,9 @@ packages:
engines: {node: '>=4.8.2'} engines: {node: '>=4.8.2'}
peerDependencies: peerDependencies:
acorn: ^6.1.0 || ^7 || ^8 acorn: ^6.1.0 || ^7 || ^8
peerDependenciesMeta:
acorn:
optional: true
dependencies: dependencies:
acorn: 8.7.1 acorn: 8.7.1
acorn-private-class-elements: 0.2.7_acorn@8.7.1 acorn-private-class-elements: 0.2.7_acorn@8.7.1

@ -8,13 +8,19 @@ import { appendUserDMConverse } from '../model/user';
* *
*/ */
export async function ensureDMConverse( export async function ensureDMConverse(
converseId: string converseId: string,
currentUserId: string
): Promise<ChatConverseInfo> { ): Promise<ChatConverseInfo> {
const converse = await getCachedConverseInfo(converseId); const converse = await getCachedConverseInfo(converseId);
if (converse === null) { if (converse === null) {
// TODO // TODO
throw new Error(t('找不到私信会话')); throw new Error(t('找不到私信会话'));
} }
if (!converse.members.includes(currentUserId)) {
throw new Error(t('会话没有权限'));
}
await appendUserDMConverse(converseId); // 添加到私人会话列表 await appendUserDMConverse(converseId); // 添加到私人会话列表
return converse; return converse;

@ -206,6 +206,7 @@
"kdd4c838c": "Jump to Group", "kdd4c838c": "Jump to Group",
"kdd6c18f8": "Service exception", "kdd6c18f8": "Service exception",
"kdef84ee6": "Plugin", "kdef84ee6": "Plugin",
"kdf6e53ca": "Converse does not have permission",
"ke17b2c87": "Do not upload pictures that violate local laws and regulations", "ke17b2c87": "Do not upload pictures that violate local laws and regulations",
"ke187440d": "Panel type cannot be empty", "ke187440d": "Panel type cannot be empty",
"kecb51e2c": "Old password", "kecb51e2c": "Old password",

@ -206,6 +206,7 @@
"kdd4c838c": "跳转到群组", "kdd4c838c": "跳转到群组",
"kdd6c18f8": "服务异常", "kdd6c18f8": "服务异常",
"kdef84ee6": "插件", "kdef84ee6": "插件",
"kdf6e53ca": "会话没有权限",
"ke17b2c87": "请勿上传违反当地法律法规的图片", "ke17b2c87": "请勿上传违反当地法律法规的图片",
"ke187440d": "面板类型不能为空", "ke187440d": "面板类型不能为空",
"kecb51e2c": "旧密码", "kecb51e2c": "旧密码",

@ -89,6 +89,7 @@ export function useConverseMessage(context: ConverseContext) {
const hasMoreMessage = converse?.hasMoreMessage ?? true; const hasMoreMessage = converse?.hasMoreMessage ?? true;
const dispatch = useAppDispatch(); const dispatch = useAppDispatch();
const messages = converse?.messages ?? []; const messages = converse?.messages ?? [];
const currentUserId = useAppSelector((state) => state.user.info?._id);
useEffect(() => { useEffect(() => {
dispatch(chatActions.updateCurrentConverseId(converseId)); dispatch(chatActions.updateCurrentConverseId(converseId));
@ -105,7 +106,7 @@ export function useConverseMessage(context: ConverseContext) {
if (!isGroup) { if (!isGroup) {
// 如果是私信会话 // 如果是私信会话
// Step 1. 创建会话 并确保私信列表中存在该会话 // Step 1. 创建会话 并确保私信列表中存在该会话
const converse = await ensureDMConverse(converseId); const converse = await ensureDMConverse(converseId, currentUserId);
dispatch(chatActions.setConverseInfo(converse)); dispatch(chatActions.setConverseInfo(converse));
} else { } else {
// 如果是群组会话(文本频道) // 如果是群组会话(文本频道)
@ -145,7 +146,7 @@ export function useConverseMessage(context: ConverseContext) {
); );
} }
} }
}, [converseId, reconnectNum]); }, [converseId, reconnectNum, currentUserId]);
// 加载更多消息 // 加载更多消息
const [{ loading: isLoadingMore }, handleFetchMoreMessage] = const [{ loading: isLoadingMore }, handleFetchMoreMessage] =

@ -5,6 +5,7 @@ import { t } from 'tailchat-shared';
/** /**
* *
* @deprecated 使 ErrorView
*/ */
export const AlertErrorView: React.FC<{ export const AlertErrorView: React.FC<{
error: Error; error: Error;

@ -1,6 +1,6 @@
import React from 'react'; import React from 'react';
import { ChatBoxContextProvider, useConverseMessage } from 'tailchat-shared'; import { ChatBoxContextProvider, useConverseMessage } from 'tailchat-shared';
import { AlertErrorView } from '../AlertErrorView'; import { ErrorView } from '../ErrorView';
import { ChatBoxPlaceholder } from './ChatBoxPlaceholder'; import { ChatBoxPlaceholder } from './ChatBoxPlaceholder';
import { ChatInputBox } from './ChatInputBox'; import { ChatInputBox } from './ChatInputBox';
import { ChatMessageList } from './ChatMessageList'; import { ChatMessageList } from './ChatMessageList';
@ -40,7 +40,7 @@ const ChatBoxInner: React.FC<ChatBoxProps> = React.memo((props) => {
} }
if (error) { if (error) {
return <AlertErrorView error={error} />; return <ErrorView error={error} />;
} }
return ( return (

@ -0,0 +1,12 @@
import React from 'react';
import { Problem } from './Problem';
/**
*
*/
export const ErrorView: React.FC<{
error: Error;
}> = React.memo(({ error }) => {
return <Problem text={String(error.message ?? error.name ?? error)} />;
});
ErrorView.displayName = 'ErrorView';
Loading…
Cancel
Save