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:
roo hutton
2024-06-26 08:04:38 +00:00
committed by Copybot
parent ce9b531892
commit bf90932f40
9 changed files with 66 additions and 18 deletions
@@ -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) {
@@ -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,
]
)