fix(permissions): add client-side hints to prevent read-only users from creating workflows or folders (#2390)

This commit is contained in:
Waleed
2025-12-15 17:14:33 -08:00
committed by GitHub
parent a45bb1bf3b
commit bdcc42e566

View File

@@ -9,6 +9,7 @@ import { useSession } from '@/lib/auth/auth-client'
import { getEnv, isTruthy } from '@/lib/core/config/env' import { getEnv, isTruthy } from '@/lib/core/config/env'
import { createLogger } from '@/lib/logs/console/logger' import { createLogger } from '@/lib/logs/console/logger'
import { useRegisterGlobalCommands } from '@/app/workspace/[workspaceId]/providers/global-commands-provider' import { useRegisterGlobalCommands } from '@/app/workspace/[workspaceId]/providers/global-commands-provider'
import { useUserPermissionsContext } from '@/app/workspace/[workspaceId]/providers/workspace-permissions-provider'
import { createCommands } from '@/app/workspace/[workspaceId]/utils/commands-utils' import { createCommands } from '@/app/workspace/[workspaceId]/utils/commands-utils'
import { import {
HelpModal, HelpModal,
@@ -65,6 +66,7 @@ export function Sidebar() {
const scrollContainerRef = useRef<HTMLDivElement>(null) const scrollContainerRef = useRef<HTMLDivElement>(null)
const { data: sessionData, isPending: sessionLoading } = useSession() const { data: sessionData, isPending: sessionLoading } = useSession()
const { canEdit } = useUserPermissionsContext()
/** /**
* Sidebar state from store with hydration tracking to prevent SSR mismatch. * Sidebar state from store with hydration tracking to prevent SSR mismatch.
@@ -516,7 +518,7 @@ export function Sidebar() {
variant='ghost' variant='ghost'
className='translate-y-[-0.25px] p-[1px]' className='translate-y-[-0.25px] p-[1px]'
onClick={handleImportWorkflow} onClick={handleImportWorkflow}
disabled={isImporting} disabled={isImporting || !canEdit}
> >
<ArrowDown className='h-[14px] w-[14px]' /> <ArrowDown className='h-[14px] w-[14px]' />
</Button> </Button>
@@ -531,7 +533,7 @@ export function Sidebar() {
variant='ghost' variant='ghost'
className='mr-[1px] translate-y-[-0.25px] p-[1px]' className='mr-[1px] translate-y-[-0.25px] p-[1px]'
onClick={handleCreateFolder} onClick={handleCreateFolder}
disabled={isCreatingFolder} disabled={isCreatingFolder || !canEdit}
> >
<FolderPlus className='h-[14px] w-[14px]' /> <FolderPlus className='h-[14px] w-[14px]' />
</Button> </Button>
@@ -546,7 +548,7 @@ export function Sidebar() {
variant='outline' variant='outline'
className='translate-y-[-0.25px] p-[1px]' className='translate-y-[-0.25px] p-[1px]'
onClick={handleCreateWorkflow} onClick={handleCreateWorkflow}
disabled={isCreatingWorkflow} disabled={isCreatingWorkflow || !canEdit}
> >
<Plus className='h-[14px] w-[14px]' /> <Plus className='h-[14px] w-[14px]' />
</Button> </Button>