File tree Expand file tree Collapse file tree 3 files changed +39
-8
lines changed
packages/ra-ui-materialui/src/layout Expand file tree Collapse file tree 3 files changed +39
-8
lines changed Original file line number Diff line number Diff line change @@ -19,6 +19,25 @@ describe('ResourceMenuItem', () => {
1919 await screen . findByText ( 'resources.posts.name' ) ;
2020 expect ( screen . queryByText ( 'resources.users.name' ) ) . toBeNull ( ) ;
2121 } ) ;
22+ it ( 'should not render when authProvider.canAccess throws' , async ( ) => {
23+ render (
24+ < AccessControl
25+ authProvider = {
26+ {
27+ checkAuth : ( ) => Promise . resolve ( ) ,
28+ canAccess : ( { resource } ) =>
29+ resource === 'posts'
30+ ? Promise . resolve ( true )
31+ : Promise . reject (
32+ new Error ( 'access control error' )
33+ ) ,
34+ } as any
35+ }
36+ />
37+ ) ;
38+ await screen . findByText ( 'resources.posts.name' ) ;
39+ expect ( screen . queryByText ( 'resources.users.name' ) ) . toBeNull ( ) ;
40+ } ) ;
2241 it ( 'should not render when authProvider.canAccess returns false with a Function as <Admin> child' , async ( ) => {
2342 render ( < AccessControlInsideAdminChildFunction /> ) ;
2443 await screen . findByText ( 'resources.posts.name' ) ;
Original file line number Diff line number Diff line change 11import * as React from 'react' ;
2- import { Resource , testDataProvider , TestMemoryRouter } from 'ra-core' ;
2+ import {
3+ AuthProvider ,
4+ Resource ,
5+ testDataProvider ,
6+ TestMemoryRouter ,
7+ } from 'ra-core' ;
38import { Menu } from './Menu' ;
49import { Layout , LayoutProps } from './Layout' ;
510import { AdminContext } from '../AdminContext' ;
@@ -100,12 +105,13 @@ export const AccessControlInsideAdminChildFunction = () => (
100105 </ TestMemoryRouter >
101106) ;
102107
103- export const AccessControl = ( ) => (
108+ export const AccessControl = ( {
109+ authProvider = authProviderForAccessControl ,
110+ } : {
111+ authProvider ?: AuthProvider ;
112+ } ) => (
104113 < TestMemoryRouter >
105- < AdminContext
106- dataProvider = { dataProvider }
107- authProvider = { authProviderForAccessControl }
108- >
114+ < AdminContext dataProvider = { dataProvider } authProvider = { authProvider } >
109115 < AdminUI layout = { CustomLayout } >
110116 < Resource name = "users" list = { < p > The users page</ p > } />
111117 < Resource
Original file line number Diff line number Diff line change @@ -13,13 +13,19 @@ import { MenuItemLink } from './MenuItemLink';
1313
1414export const ResourceMenuItem = ( { name } : { name : string } ) => {
1515 const resources = useResourceDefinitions ( ) ;
16- const { canAccess, isPending } = useCanAccess ( {
16+ const { canAccess, error , isPending } = useCanAccess ( {
1717 action : 'list' ,
1818 resource : name ,
1919 } ) ;
2020 const getResourceLabel = useGetResourceLabel ( ) ;
2121 const createPath = useCreatePath ( ) ;
22- if ( ! resources || ! resources [ name ] || isPending || canAccess === false )
22+ if (
23+ ! resources ||
24+ ! resources [ name ] ||
25+ isPending ||
26+ canAccess === false ||
27+ error != null
28+ )
2329 return null ;
2430 return (
2531 < MenuItemLink
You can’t perform that action at this time.
0 commit comments