From 4a7dd39155dbc660a1c94b7b7aa5d6807c28ac43 Mon Sep 17 00:00:00 2001 From: Pascal Mugnier Date: Mon, 30 Jul 2018 08:27:23 +0200 Subject: [PATCH] SONAR-11032 Hide Analyze Project to user without provisioning permission --- .../embed-docs-modal/EmbedDocsPopup.tsx | 18 ++++++++------- .../__tests__/EmbedDocsPopup-test.tsx | 22 +++++++++++++++++++ .../EmbedDocsPopup-test.tsx.snap | 8 ------- server/sonar-web/src/main/js/app/types.ts | 8 +++++++ 4 files changed, 40 insertions(+), 16 deletions(-) diff --git a/server/sonar-web/src/main/js/app/components/embed-docs-modal/EmbedDocsPopup.tsx b/server/sonar-web/src/main/js/app/components/embed-docs-modal/EmbedDocsPopup.tsx index 5d9cacc42e1..c62d51dfd5e 100644 --- a/server/sonar-web/src/main/js/app/components/embed-docs-modal/EmbedDocsPopup.tsx +++ b/server/sonar-web/src/main/js/app/components/embed-docs-modal/EmbedDocsPopup.tsx @@ -22,7 +22,7 @@ import * as PropTypes from 'prop-types'; import { Link } from 'react-router'; import ProductNewsMenuItem from './ProductNewsMenuItem'; import { SuggestionLink } from './SuggestionsProvider'; -import { CurrentUser, isLoggedIn } from '../../types'; +import { CurrentUser, isLoggedIn, hasGlobalPermission } from '../../types'; import { translate } from '../../../helpers/l10n'; import { getBaseUrl } from '../../../helpers/urls'; import { isSonarCloud } from '../../../helpers/system'; @@ -119,15 +119,17 @@ export default class EmbedDocsPopup extends React.PureComponent { } renderSonarQubeLinks() { + const { currentUser } = this.props; return ( - {isLoggedIn(this.props.currentUser) && ( -
  • - - {translate('embed_docs.analyze_new_project')} - -
  • - )} + {isLoggedIn(currentUser) && + hasGlobalPermission(currentUser, 'provisioning') && ( +
  • + + {translate('embed_docs.analyze_new_project')} + +
  • + )}
  • diff --git a/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/EmbedDocsPopup-test.tsx b/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/EmbedDocsPopup-test.tsx index 9423f9979fa..24f5fbec4d6 100644 --- a/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/EmbedDocsPopup-test.tsx +++ b/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/EmbedDocsPopup-test.tsx @@ -42,6 +42,28 @@ it('should display suggestion links', () => { expect(wrapper).toMatchSnapshot(); }); +it('should display analyze new project link when user has permission', () => { + const wrapper = shallow( + + ); + expect(wrapper.find('[data-test="analyze-new-project"]').exists()).toBe(true); +}); + +it('should not display analyze new project link when user does not have permission', () => { + const wrapper = shallow( + + ); + expect(wrapper.find('[data-test="analyze-new-project"]').exists()).toBe(false); +}); + it('should display correct links for SonarCloud', () => { (isSonarCloud as jest.Mock).mockReturnValueOnce(true); const context = {}; diff --git a/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/__snapshots__/EmbedDocsPopup-test.tsx.snap b/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/__snapshots__/EmbedDocsPopup-test.tsx.snap index abb6a2f122c..6cce2b6fce9 100644 --- a/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/__snapshots__/EmbedDocsPopup-test.tsx.snap +++ b/server/sonar-web/src/main/js/app/components/embed-docs-modal/__tests__/__snapshots__/EmbedDocsPopup-test.tsx.snap @@ -188,14 +188,6 @@ exports[`should display suggestion links 1`] = `
  • -
  • - - embed_docs.analyze_new_project - -
  • diff --git a/server/sonar-web/src/main/js/app/types.ts b/server/sonar-web/src/main/js/app/types.ts index 741521d8396..e02ced80d7e 100644 --- a/server/sonar-web/src/main/js/app/types.ts +++ b/server/sonar-web/src/main/js/app/types.ts @@ -100,6 +100,7 @@ export interface CoveredFile { export interface CurrentUser { isLoggedIn: boolean; + permissions?: { global: string[] }; showOnboardingTutorial?: boolean; } @@ -204,6 +205,13 @@ export function isLoggedIn(user: CurrentUser): user is LoggedInUser { return user.isLoggedIn; } +export function hasGlobalPermission(user: CurrentUser, permission: string): boolean { + if (!user.permissions) { + return false; + } + return user.permissions.global.includes(permission); +} + export function isSameHomePage(a: HomePage, b: HomePage) { return ( a.type === b.type && -- 2.39.5