From a47fa6f30d4ee49f7cce60f63f0350fdc8c45ba5 Mon Sep 17 00:00:00 2001 From: "Grot (@grafanabot)" <43478413+grafanabot@users.noreply.github.com> Date: Fri, 16 Jun 2023 05:31:56 -0400 Subject: [PATCH] [v10.0.x] Auth: Show invite button if disable login form is set to false (#70155) 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 (cherry picked from commit 21f8dd9599693597524aa55b5f14d76926bc70f5) Co-authored-by: Ieva --- .../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 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 (