Skip to content

Commit

Permalink
chore: version permissions (#6068)
Browse files Browse the repository at this point in the history
  • Loading branch information
jacobsfletch committed Apr 29, 2024
2 parents a7096c1 + 7111834 commit 3223176
Show file tree
Hide file tree
Showing 8 changed files with 27 additions and 8 deletions.
1 change: 1 addition & 0 deletions packages/next/src/views/Account/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ export const Account: React.FC<AdminViewProps> = ({ initPageResult, params, sear
config={payload.config}
hideTabs
i18n={i18n}
permissions={permissions}
/>
<HydrateClientUser permissions={permissions} user={user} />
<FormQueryParamsProvider
Expand Down
1 change: 1 addition & 0 deletions packages/next/src/views/Document/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -200,6 +200,7 @@ export const Document: React.FC<AdminViewProps> = async ({
config={payload.config}
globalConfig={globalConfig}
i18n={i18n}
permissions={permissions}
/>
)}
<HydrateClientUser permissions={permissions} user={user} />
Expand Down
3 changes: 3 additions & 0 deletions packages/payload/src/admin/elements/Tab.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import type { I18n } from '@payloadcms/translations'

import type { Permissions } from '../../auth/types.js'
import type { SanitizedCollectionConfig } from '../../collections/config/types.js'
import type { SanitizedConfig } from '../../config/types.js'
import type { SanitizedGlobalConfig } from '../../globals/config/types.js'
Expand All @@ -10,12 +11,14 @@ export type DocumentTabProps = {
config: SanitizedConfig
globalConfig?: SanitizedGlobalConfig
i18n: I18n
permissions: Permissions
}

export type DocumentTabCondition = (args: {
collectionConfig: SanitizedCollectionConfig
config: SanitizedConfig
globalConfig: SanitizedGlobalConfig
permissions: Permissions
}) => boolean

// Everything is optional because we merge in the defaults
Expand Down
4 changes: 3 additions & 1 deletion packages/ui/src/elements/DocumentHeader/Tabs/Tab/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,7 @@ export const DocumentTab: React.FC<DocumentTabProps & DocumentTabConfig> = (prop
isActive: tabIsActive,
label,
newTab,
permissions,
} = props

const { routes } = config
Expand All @@ -43,7 +44,8 @@ export const DocumentTab: React.FC<DocumentTabProps & DocumentTabConfig> = (prop
}

const meetsCondition =
!condition || (condition && Boolean(condition({ collectionConfig, config, globalConfig })))
!condition ||
(condition && Boolean(condition({ collectionConfig, config, globalConfig, permissions })))

if (meetsCondition) {
const labelToRender =
Expand Down
7 changes: 5 additions & 2 deletions packages/ui/src/elements/DocumentHeader/Tabs/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { I18n } from '@payloadcms/translations'
import type { Permissions } from 'payload/auth'
import type {
SanitizedCollectionConfig,
SanitizedConfig,
Expand All @@ -22,8 +23,9 @@ export const DocumentTabs: React.FC<{
config: SanitizedConfig
globalConfig: SanitizedGlobalConfig
i18n: I18n
permissions: Permissions
}> = (props) => {
const { collectionConfig, config, globalConfig } = props
const { collectionConfig, config, globalConfig, permissions } = props

const customViews = getCustomViews({ collectionConfig, globalConfig })

Expand Down Expand Up @@ -51,7 +53,8 @@ export const DocumentTabs: React.FC<{

const meetsCondition =
!condition ||
(condition && Boolean(condition({ collectionConfig, config, globalConfig })))
(condition &&
Boolean(condition({ collectionConfig, config, globalConfig, permissions })))

if (meetsCondition) {
return (
Expand Down
9 changes: 7 additions & 2 deletions packages/ui/src/elements/DocumentHeader/Tabs/tabs/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -68,8 +68,13 @@ export const tabs: Record<
},
Versions: {
Pill: VersionsPill,
condition: ({ collectionConfig, globalConfig }) =>
Boolean(collectionConfig?.versions || globalConfig?.versions),
condition: ({ collectionConfig, globalConfig, permissions }) =>
Boolean(
(collectionConfig?.versions &&
permissions?.collections?.[collectionConfig?.slug]?.readVersions?.permission) ||
(globalConfig?.versions &&
permissions?.globals?.[globalConfig?.slug]?.readVersions?.permission),
),
href: '/versions',
label: ({ t }) => t('version:versions'),
order: 200,
Expand Down
6 changes: 5 additions & 1 deletion packages/ui/src/elements/DocumentHeader/index.tsx
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import type { I18n } from '@payloadcms/translations'
import type { Permissions } from 'payload/auth'
import type {
SanitizedCollectionConfig,
SanitizedConfig,
Expand All @@ -21,8 +22,10 @@ export const DocumentHeader: React.FC<{
globalConfig?: SanitizedGlobalConfig
hideTabs?: boolean
i18n: I18n
permissions: Permissions
}> = (props) => {
const { collectionConfig, config, customHeader, globalConfig, hideTabs, i18n } = props
const { collectionConfig, config, customHeader, globalConfig, hideTabs, i18n, permissions } =
props

return (
<Gutter className={baseClass}>
Expand All @@ -36,6 +39,7 @@ export const DocumentHeader: React.FC<{
config={config}
globalConfig={globalConfig}
i18n={i18n}
permissions={permissions}
/>
)}
</Fragment>
Expand Down
4 changes: 2 additions & 2 deletions packages/ui/src/providers/DocumentInfo/index.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -82,11 +82,11 @@ export const DocumentInfoProvider: React.FC<
}

const isEditing = Boolean(id)
const shouldFetchVersions = Boolean(versionsConfig && docPermissions?.readVersions?.permission)

const getVersions = useCallback(async () => {
let versionFetchURL
let publishedFetchURL
const shouldFetchVersions = Boolean(versionsConfig)
let unpublishedVersionJSON = null
let versionJSON = null
let shouldFetch = true
Expand Down Expand Up @@ -209,7 +209,7 @@ export const DocumentInfoProvider: React.FC<
setVersions(versionJSON)
setUnpublishedVersions(unpublishedVersionJSON)
}
}, [i18n, globalSlug, collectionSlug, id, baseURL, locale, versionsConfig])
}, [i18n, globalSlug, collectionSlug, id, baseURL, locale, versionsConfig, shouldFetchVersions])

const getDocPermissions = React.useCallback(async () => {
let docAccessURL: string
Expand Down

0 comments on commit 3223176

Please sign in to comment.