diff --git a/public/app/features/users/UsersActionBar.test.tsx b/public/app/features/users/UsersActionBar.test.tsx index 65cc7ffff49..eee54c936d7 100644 --- a/public/app/features/users/UsersActionBar.test.tsx +++ b/public/app/features/users/UsersActionBar.test.tsx @@ -65,9 +65,10 @@ describe('Render', () => { expect(screen.getByRole('link', { name: 'someUrl' })).toHaveAttribute('href', 'some/url'); }); - it('should not show invite button when externalUserMngInfo is set', () => { + it('should not show invite button when externalUserMngInfo is set and disableLoginForm is true', () => { const originalExternalUserMngInfo = config.externalUserMngInfo; config.externalUserMngInfo = 'truthy'; + config.disableLoginForm = true; setup({ canInvite: true, @@ -77,4 +78,30 @@ describe('Render', () => { // Reset the disableLoginForm mock to its original value config.externalUserMngInfo = originalExternalUserMngInfo; }); + + it('should show invite button when externalUserMngInfo is not set and disableLoginForm is true', () => { + config.externalUserMngInfo = ''; + config.disableLoginForm = true; + + setup({ + canInvite: true, + }); + + expect(screen.getByRole('link', { name: 'Invite' })).toHaveAttribute('href', 'org/users/invite'); + // Reset the disableLoginForm mock to its original value + config.disableLoginForm = false; + }); + + it('should show invite button when externalUserMngInfo is set and disableLoginForm is false', () => { + const originalExternalUserMngInfo = config.externalUserMngInfo; + config.externalUserMngInfo = 'truthy'; + + setup({ + canInvite: true, + }); + + expect(screen.getByRole('link', { name: 'Invite' })).toHaveAttribute('href', 'org/users/invite'); + // Reset the disableLoginForm mock to its original value + config.externalUserMngInfo = originalExternalUserMngInfo; + }); }); diff --git a/public/app/features/users/UsersActionBar.tsx b/public/app/features/users/UsersActionBar.tsx index 78a3478f7fa..92c5805f06b 100644 --- a/public/app/features/users/UsersActionBar.tsx +++ b/public/app/features/users/UsersActionBar.tsx @@ -49,8 +49,10 @@ export const UsersActionBarUnconnected = ({ { label: `Pending Invites (${pendingInvitesCount})`, value: 'invites' }, ]; const canAddToOrg: boolean = contextSrv.hasAccess(AccessControlAction.OrgUsersAdd, canInvite); - // Hide Invite button in case users are managed externally - const showInviteButton: boolean = canAddToOrg && !config.externalUserMngInfo; + // Show invite button in the following cases: + // 1) the instance is not a hosted Grafana instance (!config.externalUserMngInfo) + // 2) new basic auth users can be created for this instance (!config.disableLoginForm). + const showInviteButton: boolean = canAddToOrg && !(config.disableLoginForm && config.externalUserMngInfo); return (