fix(ui): field permissions not being correctly updated when locale changes (#7611)

Closes https://github.com/payloadcms/payload/issues/7262
This commit is contained in:
Paul
2024-08-09 18:39:14 -06:00
committed by GitHub
parent e225783d76
commit 4b2a9f75d0
2 changed files with 13 additions and 9 deletions

View File

@@ -31,7 +31,7 @@ type CreateAccessPromise = (args: {
export async function getEntityPolicies<T extends Args>(args: T): Promise<ReturnType<T>> { export async function getEntityPolicies<T extends Args>(args: T): Promise<ReturnType<T>> {
const { id, type, entity, operations, req } = args const { id, type, entity, operations, req } = args
const { data, payload, user } = req const { data, locale, payload, user } = req
const isLoggedIn = !!user const isLoggedIn = !!user
const policies = { const policies = {
@@ -45,6 +45,8 @@ export async function getEntityPolicies<T extends Args>(args: T): Promise<Return
if (type === 'global') { if (type === 'global') {
return payload.findGlobal({ return payload.findGlobal({
slug: entity.slug, slug: entity.slug,
fallbackLocale: null,
locale,
overrideAccess: true, overrideAccess: true,
req, req,
}) })
@@ -55,7 +57,9 @@ export async function getEntityPolicies<T extends Args>(args: T): Promise<Return
const paginatedRes = await payload.find({ const paginatedRes = await payload.find({
collection: entity.slug, collection: entity.slug,
depth: 0, depth: 0,
fallbackLocale: null,
limit: 1, limit: 1,
locale,
overrideAccess: true, overrideAccess: true,
pagination: false, pagination: false,
req, req,
@@ -79,6 +83,8 @@ export async function getEntityPolicies<T extends Args>(args: T): Promise<Return
id, id,
collection: entity.slug, collection: entity.slug,
depth: 0, depth: 0,
fallbackLocale: null,
locale,
overrideAccess: true, overrideAccess: true,
req, req,
}) })

View File

@@ -438,8 +438,11 @@ const DocumentInfo: React.FC<
serverURL, serverURL,
signal: abortController.signal, signal: abortController.signal,
}) })
const data = reduceFieldsToValues(result, true)
setData(data)
if (localeChanged) void getDocPermissions(data)
setData(reduceFieldsToValues(result, true))
setInitialState(result) setInitialState(result)
} catch (err) { } catch (err) {
if (!abortController.signal.aborted) { if (!abortController.signal.aborted) {
@@ -474,6 +477,7 @@ const DocumentInfo: React.FC<
onLoadError, onLoadError,
initialDataFromProps, initialDataFromProps,
initialStateFromProps, initialStateFromProps,
getDocPermissions,
]) ])
useEffect(() => { useEffect(() => {
@@ -494,13 +498,8 @@ const DocumentInfo: React.FC<
}, [collectionConfig, data, dateFormat, i18n, id, globalConfig]) }, [collectionConfig, data, dateFormat, i18n, id, globalConfig])
useEffect(() => { useEffect(() => {
const localeChanged = locale !== prevLocalePermissions.current
if (data && (collectionSlug || globalSlug)) { if (data && (collectionSlug || globalSlug)) {
if (localeChanged) { if (
prevLocalePermissions.current = locale
void getDocPermissions(data)
} else if (
hasInitializedDocPermissions.current === false && hasInitializedDocPermissions.current === false &&
(!docPermissions || (!docPermissions ||
hasSavePermission === undefined || hasSavePermission === undefined ||
@@ -521,7 +520,6 @@ const DocumentInfo: React.FC<
collectionSlug, collectionSlug,
globalSlug, globalSlug,
data, data,
locale,
docPermissions, docPermissions,
hasSavePermission, hasSavePermission,
hasPublishPermission, hasPublishPermission,