diff --git a/packages/block-library/src/navigation-link/link-ui.js b/packages/block-library/src/navigation-link/link-ui.js index 6619c46253546e..deed35145d6dea 100644 --- a/packages/block-library/src/navigation-link/link-ui.js +++ b/packages/block-library/src/navigation-link/link-ui.js @@ -147,15 +147,18 @@ function LinkUIBlockInserter( { clientId, onBack, onSelectBlock } ) { } function UnforwardedLinkUI( props, ref ) { + const { label, url, opensInNewTab, type, kind } = props.link; + const postType = type || 'page'; + const [ addingBlock, setAddingBlock ] = useState( false ); const [ focusAddBlockButton, setFocusAddBlockButton ] = useState( false ); const { saveEntityRecord } = useDispatch( coreStore ); - const pagesPermissions = useResourcePermissions( 'pages' ); - const postsPermissions = useResourcePermissions( 'posts' ); + const permissions = useResourcePermissions( { + kind: 'postType', + name: postType, + } ); async function handleCreate( pageTitle ) { - const postType = props.link.type || 'page'; - const page = await saveEntityRecord( 'postType', postType, { title: pageTitle, status: 'draft', @@ -180,15 +183,6 @@ function UnforwardedLinkUI( props, ref ) { }; } - const { label, url, opensInNewTab, type, kind } = props.link; - - let userCanCreate = false; - if ( ! type || type === 'page' ) { - userCanCreate = pagesPermissions.canCreate; - } else if ( type === 'post' ) { - userCanCreate = postsPermissions.canCreate; - } - // Memoize link value to avoid overriding the LinkControl's internal state. // This is a temporary fix. See https://github.com/WordPress/gutenberg/issues/50976#issuecomment-1568226407. const link = useMemo( @@ -241,7 +235,7 @@ function UnforwardedLinkUI( props, ref ) { hasRichPreviews value={ link } showInitialSuggestions - withCreateSuggestion={ userCanCreate } + withCreateSuggestion={ permissions.canCreate } createSuggestion={ handleCreate } createSuggestionButtonText={ ( searchTerm ) => { let format; diff --git a/packages/block-library/src/navigation/use-navigation-menu.js b/packages/block-library/src/navigation/use-navigation-menu.js index 3834661ed6101b..5fd942c485bf84 100644 --- a/packages/block-library/src/navigation/use-navigation-menu.js +++ b/packages/block-library/src/navigation/use-navigation-menu.js @@ -14,7 +14,11 @@ import { useSelect } from '@wordpress/data'; import { PRELOADED_NAVIGATION_MENUS_QUERY } from './constants'; export default function useNavigationMenu( ref ) { - const permissions = useResourcePermissions( 'navigation', ref ); + const permissions = useResourcePermissions( { + kind: 'postType', + name: 'wp_navigation', + id: ref, + } ); const { navigationMenu, diff --git a/packages/edit-widgets/src/components/widget-areas-block-editor-provider/index.js b/packages/edit-widgets/src/components/widget-areas-block-editor-provider/index.js index d3920f1103a334..709a07e71db7d9 100644 --- a/packages/edit-widgets/src/components/widget-areas-block-editor-provider/index.js +++ b/packages/edit-widgets/src/components/widget-areas-block-editor-provider/index.js @@ -5,11 +5,7 @@ import { SlotFillProvider } from '@wordpress/components'; import { useViewportMatch } from '@wordpress/compose'; import { uploadMedia } from '@wordpress/media-utils'; import { useDispatch, useSelect } from '@wordpress/data'; -import { - useEntityBlockEditor, - store as coreStore, - useResourcePermissions, -} from '@wordpress/core-data'; +import { useEntityBlockEditor, store as coreStore } from '@wordpress/core-data'; import { useMemo } from '@wordpress/element'; import { privateApis as blockEditorPrivateApis } from '@wordpress/block-editor'; import { privateApis as editPatternsPrivateApis } from '@wordpress/patterns'; @@ -37,9 +33,9 @@ export default function WidgetAreasBlockEditorProvider( { children, ...props } ) { - const mediaPermissions = useResourcePermissions( 'media' ); const isLargeViewport = useViewportMatch( 'medium' ); const { + hasUploadPermissions, reusableBlocks, isFixedToolbarActive, keepCaretInsideBlock, @@ -55,6 +51,11 @@ export default function WidgetAreasBlockEditorProvider( { ? getEntityRecord( 'root', 'site' ) : undefined; return { + hasUploadPermissions: + canUser( 'create', { + kind: 'root', + name: 'media', + } ) ?? true, widgetAreas: select( editWidgetsStore ).getWidgetAreas(), widgets: select( editWidgetsStore ).getWidgets(), reusableBlocks: ALLOW_REUSABLE_BLOCKS @@ -76,7 +77,7 @@ export default function WidgetAreasBlockEditorProvider( { const settings = useMemo( () => { let mediaUploadBlockEditor; - if ( mediaPermissions.canCreate ) { + if ( hasUploadPermissions ) { mediaUploadBlockEditor = ( { onError, ...argumentsObject } ) => { uploadMedia( { wpAllowedMimeTypes: blockEditorSettings.allowedMimeTypes, @@ -97,11 +98,11 @@ export default function WidgetAreasBlockEditorProvider( { pageForPosts, }; }, [ + hasUploadPermissions, blockEditorSettings, isFixedToolbarActive, isLargeViewport, keepCaretInsideBlock, - mediaPermissions.canCreate, reusableBlocks, setIsInserterOpened, pageOnFront,