mirror of
https://github.com/yu-i-i/overleaf-cep.git
synced 2026-11-15 06:33:55 +01:00
Merge pull request #18936 from overleaf/rh-viewer-no-comment
[web] Remove access to commenting/chat for collaborators with Viewer permission GitOrigin-RevId: 03957cb8c04866318a4b94bdb72843e7d7a5a003
This commit is contained in:
@@ -8,6 +8,7 @@ import {
|
||||
} from '@/features/ide-react/types/permissions'
|
||||
import useScopeValue from '@/shared/hooks/use-scope-value'
|
||||
import { DeepReadonly } from '../../../../../types/utils'
|
||||
import useViewerPermissions from '@/shared/hooks/use-viewer-permissions'
|
||||
|
||||
export const PermissionsContext = createContext<Permissions | undefined>(
|
||||
undefined
|
||||
@@ -40,6 +41,12 @@ const anonymousPermissionsMap: typeof permissionsMap = {
|
||||
owner: { ...permissionsMap.owner, comment: false },
|
||||
}
|
||||
|
||||
const linkSharingWarningPermissionsMap: typeof permissionsMap = {
|
||||
readOnly: { ...permissionsMap.readOnly, comment: false },
|
||||
readAndWrite: permissionsMap.readAndWrite,
|
||||
owner: permissionsMap.owner,
|
||||
}
|
||||
|
||||
export const PermissionsProvider: React.FC = ({ children }) => {
|
||||
const [permissions, setPermissions] =
|
||||
useScopeValue<Readonly<Permissions>>('permissions')
|
||||
@@ -47,14 +54,20 @@ export const PermissionsProvider: React.FC = ({ children }) => {
|
||||
const { permissionsLevel } = useEditorContext() as {
|
||||
permissionsLevel: PermissionsLevel
|
||||
}
|
||||
const hasViewerPermissions = useViewerPermissions()
|
||||
const anonymous = getMeta('ol-anonymous')
|
||||
|
||||
useEffect(() => {
|
||||
const activePermissionsMap = anonymous
|
||||
? anonymousPermissionsMap
|
||||
: permissionsMap
|
||||
let activePermissionsMap
|
||||
if (hasViewerPermissions) {
|
||||
activePermissionsMap = linkSharingWarningPermissionsMap
|
||||
} else {
|
||||
activePermissionsMap = anonymous
|
||||
? anonymousPermissionsMap
|
||||
: permissionsMap
|
||||
}
|
||||
setPermissions(activePermissionsMap[permissionsLevel])
|
||||
}, [anonymous, permissionsLevel, setPermissions])
|
||||
}, [anonymous, permissionsLevel, setPermissions, hasViewerPermissions])
|
||||
|
||||
useEffect(() => {
|
||||
if (connectionState.forceDisconnected) {
|
||||
|
||||
+10
-4
@@ -24,7 +24,6 @@ import {
|
||||
useEditorManagerContext,
|
||||
} from '@/features/ide-react/context/editor-manager-context'
|
||||
import { debugConsole } from '@/utils/debugging'
|
||||
import { useEditorContext } from '@/shared/context/editor-context'
|
||||
import { deleteJSON, getJSON, postJSON } from '@/infrastructure/fetch-json'
|
||||
import ColorManager from '@/ide/colors/ColorManager'
|
||||
import RangesTracker from '@overleaf/ranges-tracker'
|
||||
@@ -65,7 +64,9 @@ import {
|
||||
EditOperation,
|
||||
} from '../../../../../../../types/change'
|
||||
import { RangesTrackerWithResolvedThreadIds } from '@/features/ide-react/editor/document-container'
|
||||
import useViewerPermissions from '@/shared/hooks/use-viewer-permissions'
|
||||
import getMeta from '@/utils/meta'
|
||||
import { useEditorContext } from '@/shared/context/editor-context'
|
||||
|
||||
const dispatchReviewPanelEvent = (type: string, payload?: any) => {
|
||||
window.dispatchEvent(
|
||||
@@ -151,6 +152,7 @@ function useReviewPanelState(): ReviewPanel.ReviewPanelState {
|
||||
const permissions = usePermissionsContext()
|
||||
const { showGenericMessageModal } = useModalsContext()
|
||||
const addCommentEmitter = useScopeEventEmitter('comment:start_adding')
|
||||
const hasViewerPermissions = useViewerPermissions()
|
||||
|
||||
const layoutToLeft = useLayoutToLeft('.ide-react-editor-panel')
|
||||
const [subView, setSubView] =
|
||||
@@ -418,7 +420,7 @@ function useReviewPanelState(): ReviewPanel.ReviewPanelState {
|
||||
}
|
||||
|
||||
if (!users[change.metadata.user_id]) {
|
||||
if (!isRestrictedTokenMember) {
|
||||
if (!(isRestrictedTokenMember || hasViewerPermissions)) {
|
||||
refreshChangeUsers(change.metadata.user_id)
|
||||
}
|
||||
}
|
||||
@@ -426,7 +428,10 @@ function useReviewPanelState(): ReviewPanel.ReviewPanelState {
|
||||
|
||||
let localResolvedThreadIds = resolvedThreadIds
|
||||
|
||||
if (!isRestrictedTokenMember && rangesTracker.comments.length > 0) {
|
||||
if (
|
||||
!(isRestrictedTokenMember || hasViewerPermissions) &&
|
||||
rangesTracker.comments.length > 0
|
||||
) {
|
||||
const threadsLoadResult = await ensureThreadsAreLoaded()
|
||||
if (threadsLoadResult?.resolvedThreadIds) {
|
||||
localResolvedThreadIds = threadsLoadResult.resolvedThreadIds
|
||||
@@ -483,13 +488,14 @@ function useReviewPanelState(): ReviewPanel.ReviewPanelState {
|
||||
getChangeTracker,
|
||||
getDocEntries,
|
||||
getDocResolvedComments,
|
||||
isRestrictedTokenMember,
|
||||
refreshChangeUsers,
|
||||
resolvedThreadIds,
|
||||
users,
|
||||
ensureThreadsAreLoaded,
|
||||
loadingThreads,
|
||||
setLoadingThreads,
|
||||
hasViewerPermissions,
|
||||
isRestrictedTokenMember,
|
||||
]
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user