From 21f8dd9599693597524aa55b5f14d76926bc70f5 Mon Sep 17 00:00:00 2001 From: Ieva Date: Thu, 15 Jun 2023 13:17:45 +0100 Subject: [PATCH] Auth: Show invite button if disable login form is set to false (#69946) * show invite button if disable login form is set to false * fix test * Update public/app/features/users/UsersActionBar.tsx Co-authored-by: Misi --------- Co-authored-by: Misi --- .../features/users/UsersActionBar.test.tsx | 29 ++++++++++++++++++- public/app/features/users/UsersActionBar.tsx | 6 ++-- 2 files changed, 32 insertions(+), 3 deletions(-) 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 3e0528b7b70..4a97fb7de15 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 (