fix: adding git admin permissions (#28719)
## Description - Derives isGitAdmin from workspace permissions - Disables connect to git if not git admin - Disables disconnect, default branch and branch protection if not git admin #### PR fixes following issue(s) Fixes #28020 #### Media <img width="1728" alt="image" src="https://github.com/appsmithorg/appsmith/assets/8724051/22d133e6-4836-4184-86ce-c2ab1eff26c5"> #### Type of change - New feature (non-breaking change which adds functionality) ## Testing > #### How Has This Been Tested? > Please describe the tests that you ran to verify your changes. Also list any relevant details for your test configuration. > Delete anything that is not relevant - [x] Manual - [ ] JUnit - [ ] Jest - [ ] Cypress > > #### Test Plan > Add Testsmith test cases links that relate to this PR > > #### Issues raised during DP testing > Link issues raised during DP testing for better visiblity and tracking (copy link from comments dropped on this PR) > > > ## Checklist: #### Dev activity - [ ] My code follows the style guidelines of this project - [ ] I have performed a self-review of my own code - [ ] I have commented my code, particularly in hard-to-understand areas - [ ] I have made corresponding changes to the documentation - [ ] My changes generate no new warnings - [ ] I have added tests that prove my fix is effective or that my feature works - [ ] New and existing unit tests pass locally with my changes - [ ] PR is being merged under a feature flag #### QA activity: - [ ] [Speedbreak features](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#speedbreakers-) have been covered - [ ] Test plan covers all impacted features and [areas of interest](https://github.com/appsmithorg/TestSmith/wiki/Guidelines-for-test-plans#areas-of-interest-) - [ ] Test plan has been peer reviewed by project stakeholders and other QA members - [ ] Manually tested functionality on DP - [ ] We had an implementation alignment call with stakeholders post QA Round 2 - [ ] Cypress test cases have been added and approved by SDET/manual QA - [ ] Added `Test Plan Approved` label after Cypress tests were reviewed - [ ] Added `Test Plan Approved` label after JUnit tests were reviewed
This commit is contained in:
parent
89601117b6
commit
0238a8adc8
|
|
@ -1088,6 +1088,8 @@ export const NOW_PROTECT_BRANCH = () =>
|
|||
export const APPSMITH_ENTERPRISE = () => "Appsmith Enterprise";
|
||||
export const PROTECT_BRANCH_SUCCESS = () => "Changed protected branches";
|
||||
export const UPDATE_DEFAULT_BRANCH_SUCCESS = () => "Updated default branch";
|
||||
export const CONTACT_ADMIN_FOR_GIT = () =>
|
||||
"Please contact your workspace admin to connect your app to a git repo";
|
||||
// Git Branch Protection end
|
||||
|
||||
export const NAV_DESCRIPTION = () =>
|
||||
|
|
|
|||
|
|
@ -12,6 +12,7 @@ import {
|
|||
} from "@appsmith/constants/messages";
|
||||
import { Button } from "design-system";
|
||||
import { KBEditorMenuItem } from "@appsmith/pages/Editor/KnowledgeBase/KBEditorMenuItem";
|
||||
import { useIsGitAdmin } from "pages/Editor/gitSync/hooks/useIsGitAdmin";
|
||||
|
||||
interface Props {
|
||||
trigger: ReactNode;
|
||||
|
|
@ -21,6 +22,7 @@ interface Props {
|
|||
export const DeployLinkButton = (props: Props) => {
|
||||
const dispatch = useDispatch();
|
||||
const isGitConnected = useSelector(getIsGitConnected);
|
||||
const isGitAdmin = useIsGitAdmin();
|
||||
|
||||
const goToGitConnectionPopup = () => {
|
||||
AnalyticsUtil.logEvent("GS_CONNECT_GIT_CLICK", {
|
||||
|
|
@ -46,7 +48,7 @@ export const DeployLinkButton = (props: Props) => {
|
|||
/>
|
||||
</MenuTrigger>
|
||||
<MenuContent>
|
||||
{!isGitConnected && (
|
||||
{!isGitConnected && isGitAdmin && (
|
||||
<MenuItem
|
||||
className="t--connect-to-git-btn"
|
||||
onClick={goToGitConnectionPopup}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
import React from "react";
|
||||
import React, { useMemo } from "react";
|
||||
import styled from "styled-components";
|
||||
|
||||
import BranchButton from "./BranchButton";
|
||||
|
|
@ -11,6 +11,7 @@ import {
|
|||
CONNECT_GIT,
|
||||
CONNECT_GIT_BETA,
|
||||
CONNECTING_TO_REPO_DISABLED,
|
||||
CONTACT_ADMIN_FOR_GIT,
|
||||
createMessage,
|
||||
DURING_ONBOARDING_TOUR,
|
||||
GIT_SETTINGS,
|
||||
|
|
@ -44,6 +45,7 @@ import { Button, Icon, Tooltip } from "design-system";
|
|||
import AnalyticsUtil from "utils/AnalyticsUtil";
|
||||
import { useFeatureFlag } from "utils/hooks/useFeatureFlag";
|
||||
import { FEATURE_FLAG } from "@appsmith/entities/FeatureFlag";
|
||||
import { useIsGitAdmin } from "../hooks/useIsGitAdmin";
|
||||
|
||||
interface QuickActionButtonProps {
|
||||
className?: string;
|
||||
|
|
@ -236,21 +238,35 @@ const OuterContainer = styled.div`
|
|||
height: 100%;
|
||||
`;
|
||||
|
||||
const CenterDiv = styled.div`
|
||||
text-align: center;
|
||||
`;
|
||||
|
||||
function ConnectGitPlaceholder() {
|
||||
const dispatch = useDispatch();
|
||||
const isInGuidedTour = useSelector(inGuidedTour);
|
||||
const isTooltipEnabled = isInGuidedTour;
|
||||
const tooltipContent = !isInGuidedTour ? (
|
||||
<>
|
||||
<div>{createMessage(NOT_LIVE_FOR_YOU_YET)}</div>
|
||||
<div>{createMessage(COMING_SOON)}</div>
|
||||
</>
|
||||
) : (
|
||||
<>
|
||||
<div>{createMessage(CONNECTING_TO_REPO_DISABLED)}</div>
|
||||
<div>{createMessage(DURING_ONBOARDING_TOUR)}</div>
|
||||
</>
|
||||
);
|
||||
const isGitAdmin = useIsGitAdmin();
|
||||
const isTooltipEnabled = isInGuidedTour || !isGitAdmin;
|
||||
const tooltipContent = useMemo(() => {
|
||||
if (!isGitAdmin) {
|
||||
return <CenterDiv>{createMessage(CONTACT_ADMIN_FOR_GIT)}</CenterDiv>;
|
||||
}
|
||||
if (isInGuidedTour) {
|
||||
return (
|
||||
<>
|
||||
<div>{createMessage(CONNECTING_TO_REPO_DISABLED)}</div>
|
||||
<div>{createMessage(DURING_ONBOARDING_TOUR)}</div>
|
||||
</>
|
||||
);
|
||||
}
|
||||
return (
|
||||
<>
|
||||
<div>{createMessage(NOT_LIVE_FOR_YOU_YET)}</div>
|
||||
<div>{createMessage(COMING_SOON)}</div>
|
||||
</>
|
||||
);
|
||||
}, [isInGuidedTour, isGitAdmin]);
|
||||
|
||||
const isGitConnectionEnabled = !isInGuidedTour;
|
||||
|
||||
return (
|
||||
|
|
@ -265,6 +281,7 @@ function ConnectGitPlaceholder() {
|
|||
{isGitConnectionEnabled ? (
|
||||
<Button
|
||||
className="t--connect-git-bottom-bar"
|
||||
isDisabled={!isGitAdmin}
|
||||
kind="secondary"
|
||||
onClick={() => {
|
||||
AnalyticsUtil.logEvent("GS_CONNECT_GIT_CLICK", {
|
||||
|
|
|
|||
|
|
@ -74,7 +74,12 @@ function GitDisconnect() {
|
|||
</Text>
|
||||
<Text renderAs="p">{createMessage(DISCONNECT_GIT_MESSAGE)}</Text>
|
||||
</BodyInnerContainer>
|
||||
<Button kind="error" onClick={handleDisconnect} size="md">
|
||||
<Button
|
||||
data-testid="t--git-disconnect-btn"
|
||||
kind="error"
|
||||
onClick={handleDisconnect}
|
||||
size="md"
|
||||
>
|
||||
{createMessage(DISCONNECT_GIT)}
|
||||
</Button>
|
||||
</BodyContainer>
|
||||
|
|
|
|||
|
|
@ -0,0 +1,19 @@
|
|||
/* eslint-disable jest/no-focused-tests */
|
||||
import React from "react";
|
||||
import { render, screen } from "test/testUtils";
|
||||
import GitSettings from ".";
|
||||
import type { AppState } from "@appsmith/reducers";
|
||||
|
||||
jest.mock("../../hooks/useIsGitAdmin", () => ({
|
||||
useIsGitAdmin: () => false,
|
||||
}));
|
||||
|
||||
describe("GitSettings test for git admin disabled", () => {
|
||||
it("Branch protection, default branch and disconnect disabled when not ", () => {
|
||||
const initialState: Partial<AppState> = {};
|
||||
render(<GitSettings />, { initialState });
|
||||
expect(screen.queryByTestId("t--git-protected-branches-select")).toBe(null);
|
||||
expect(screen.queryByTestId("t--git-default-branch-select")).toBe(null);
|
||||
expect(screen.queryByTestId("t--git-disconnect-btn")).toBe(null);
|
||||
});
|
||||
});
|
||||
|
|
@ -7,6 +7,7 @@ import GitDefaultBranch from "./GitDefaultBranch";
|
|||
import GitProtectedBranches from "./GitProtectedBranches";
|
||||
import { useSelector } from "react-redux";
|
||||
import { getIsGitProtectedFeatureEnabled } from "selectors/gitSyncSelectors";
|
||||
import { useIsGitAdmin } from "../../hooks/useIsGitAdmin";
|
||||
|
||||
const Container = styled.div`
|
||||
overflow: auto;
|
||||
|
|
@ -23,18 +24,20 @@ function GitSettings() {
|
|||
const isGitProtectedFeatureEnabled = useSelector(
|
||||
getIsGitProtectedFeatureEnabled,
|
||||
);
|
||||
const isGitAdmin = useIsGitAdmin();
|
||||
|
||||
return (
|
||||
<ModalBody>
|
||||
<Container>
|
||||
<GitUserSettings />
|
||||
{isGitProtectedFeatureEnabled ? (
|
||||
{isGitProtectedFeatureEnabled && isGitAdmin ? (
|
||||
<>
|
||||
<StyledDivider />
|
||||
<GitDefaultBranch />
|
||||
<GitProtectedBranches />
|
||||
</>
|
||||
) : null}
|
||||
<GitDisconnect />
|
||||
{isGitAdmin && <GitDisconnect />}
|
||||
</Container>
|
||||
</ModalBody>
|
||||
);
|
||||
|
|
|
|||
15
app/client/src/pages/Editor/gitSync/hooks/useIsGitAdmin.ts
Normal file
15
app/client/src/pages/Editor/gitSync/hooks/useIsGitAdmin.ts
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
import { FEATURE_FLAG } from "@appsmith/entities/FeatureFlag";
|
||||
import { getTenantPermissions } from "@appsmith/selectors/tenantSelectors";
|
||||
import { getHasCreateWorkspacePermission } from "@appsmith/utils/BusinessFeatures/permissionPageHelpers";
|
||||
import { useSelector } from "react-redux";
|
||||
import { useFeatureFlag } from "utils/hooks/useFeatureFlag";
|
||||
|
||||
export const useIsGitAdmin = () => {
|
||||
const isFeatureEnabled = useFeatureFlag(FEATURE_FLAG.license_gac_enabled);
|
||||
const tenantPermissions = useSelector(getTenantPermissions);
|
||||
const canCreateWorkspace = getHasCreateWorkspacePermission(
|
||||
isFeatureEnabled,
|
||||
tenantPermissions,
|
||||
);
|
||||
return canCreateWorkspace;
|
||||
};
|
||||
Loading…
Reference in New Issue
Block a user