diff --git a/packages/nc-gui-v2/components/shared-view/Grid.vue b/packages/nc-gui-v2/components/shared-view/Grid.vue index 7c0c8690e9..a17f77b565 100644 --- a/packages/nc-gui-v2/components/shared-view/Grid.vue +++ b/packages/nc-gui-v2/components/shared-view/Grid.vue @@ -1,10 +1,13 @@ diff --git a/packages/nc-gui-v2/components/smartsheet/Grid.vue b/packages/nc-gui-v2/components/smartsheet/Grid.vue index 9b17581440..a59da777f7 100644 --- a/packages/nc-gui-v2/components/smartsheet/Grid.vue +++ b/packages/nc-gui-v2/components/smartsheet/Grid.vue @@ -49,6 +49,7 @@ const reloadViewDataHook = inject(ReloadViewDataHookInj, createEventHook()) const openNewRecordFormHook = inject(OpenNewRecordFormHookInj, createEventHook()) const { isUIAllowed } = useUIPermission() +const hasEditPermission = isUIAllowed('xcDatatableEditable') // todo: get from parent ( inject or use prop ) const isView = false @@ -65,7 +66,7 @@ const _contextMenu = ref(false) const contextMenu = computed({ get: () => _contextMenu.value, set: (val) => { - if (!readOnly) { + if (hasEditPermission) { _contextMenu.value = val } }, @@ -102,7 +103,7 @@ provide(PaginationDataInj, paginationData) provide(ChangePageInj, changePage) -provide(ReadonlyInj, !isUIAllowed('xcDatatableEditable')) +provide(ReadonlyInj, !hasEditPermission) reloadViewDataHook?.on(async () => { await loadData() @@ -170,7 +171,7 @@ const clearCell = async (ctx: { row: number; col: number }) => { const { copy } = useClipboard() const makeEditable = (row: Row, col: ColumnType) => { - if (isPublicView.value || editEnabled || isView) { + if (!hasEditPermission || editEnabled || isView) { return } if (!isPkAvail.value && !row.rowMeta.new) { @@ -426,7 +427,7 @@ const onNavigate = (dir: NavigateDir) => { :key="columnObj.id" class="cell relative cursor-pointer nc-grid-cell" :class="{ - active: !isPublicView && selected.col === colIndex && selected.row === rowIndex, + active: isUIAllowed('xcDatatableEditable') && selected.col === colIndex && selected.row === rowIndex, }" :data-key="rowIndex + columnObj.id" :data-col="columnObj.id" @@ -472,7 +473,7 @@ const onNavigate = (dir: NavigateDir) => { TODO: add relationType !== 'bt' ? v1: --> - + storage.value.token || '', set: (val) => (storage.value.token = val), }) + const isAuthenticated = !!token.value const appInfo = ref({ ncSiteUrl: process.env.NC_BACKEND_URL || (process.env.NODE_ENV === 'production' ? location.origin : 'http://localhost:8080'), @@ -105,6 +106,7 @@ export function useGlobalState(storageKey = 'nocodb-gui-v2'): State { ...toRefs(storage.value), storage, token, + isAuthenticated, jwtPayload: payload, timestamp, runningRequests, diff --git a/packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts b/packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts index b89ef57c00..fec40365bb 100644 --- a/packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts +++ b/packages/nc-gui-v2/composables/useUIPermission/rolePermissions.ts @@ -1,4 +1,5 @@ const rolePermissions = { + super: '*', creator: '*', owner: '*', guest: {},