feat: code split permission helpers and added null check for some selectors (#17718)

This commit is contained in:
Sangeeth Sivan 2022-10-20 11:33:33 +05:30 committed by GitHub
parent 8b419a177c
commit 62fb99929e
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
18 changed files with 77 additions and 31 deletions

View File

@ -40,7 +40,7 @@ import { isEmail } from "utils/formhelpers";
import {
isPermitted,
PERMISSION_TYPE,
} from "pages/Applications/permissionHelpers";
} from "@appsmith/utils/permissionHelpers";
import { getAppsmithConfigs } from "@appsmith/configs";
import { ReactComponent as NoEmailConfigImage } from "assets/images/email-not-configured.svg";
import AnalyticsUtil from "utils/AnalyticsUtil";

View File

@ -2,7 +2,7 @@ import {
ReduxActionTypes,
ReduxActionErrorTypes,
} from "@appsmith/constants/ReduxActionConstants";
import { PERMISSION_TYPE } from "pages/Applications/permissionHelpers";
import { PERMISSION_TYPE } from "@appsmith/utils/permissionHelpers";
import { put } from "redux-saga/effects";
// On CE we don't expose tenant config so this shouldn't make any API calls and should just return necessary permissions for the user

View File

@ -1,5 +1,5 @@
import { AppState } from "@appsmith/reducers";
export const getTenantPermissions = (state: AppState) => {
return state.tenant.userPermissions;
return state.tenant?.userPermissions;
};

View File

@ -0,0 +1,50 @@
export enum PERMISSION_TYPE {
/* Workspace permissions */
CREATE_WORKSPACE = "create:workspaces",
MANAGE_WORKSPACE = "manage:workspaces",
READ_WORKSPACE = "read:workspaces",
INVITE_USER_TO_WORKSPACE = "inviteUsers:workspace",
/* Application permissions */
CREATE_APPLICATION = "manage:workspaceApplications",
MANAGE_APPLICATION = "manage:applications",
EXPORT_APPLICATION = "export:applications",
READ_APPLICATION = "read:applications",
MAKE_PUBLIC_APPLICATION = "makePublic:applications",
PUBLISH_APPLICATION = "publish:workspaceApplications",
/* Datasource permissions */
CREATE_DATASOURCES = "create:datasources",
EXECUTE_DATASOURCES = "execute:datasources",
CREATE_DATASOURCE_ACTIONS = "create:datasourceActions",
DELETE_DATASOURCES = "delete:datasources",
MANAGE_DATASOURCES = "manage:datasources",
EXECUTE_WORKSPACE_DATASOURCES = "execute:workspaceDatasources",
/* Page permissions */
CREATE_PAGES = "create:pages",
MANAGE_PAGES = "manage:pages",
DELETE_PAGES = "delete:pages",
/* Query permissions */
CREATE_ACTIONS = "create:pageActions",
MANAGE_ACTIONS = "manage:actions",
DELETE_ACTIONS = "delete:actions",
EXECUTE_ACTIONS = "execute:actions",
}
export enum LOGIC_FILTER {
AND = "AND",
OR = "OR",
}
export const isPermitted = (
permissions: string[] = [],
type: string | string[],
filter: LOGIC_FILTER = LOGIC_FILTER.AND,
) => {
if (Array.isArray(type)) {
if (filter === LOGIC_FILTER.AND) {
return type.every((t) => permissions.includes(t));
} else {
return type.some((t) => permissions.includes(t));
}
}
return permissions.includes(type);
};

View File

@ -1,5 +1,5 @@
import React, { ReactNode, useState, useEffect } from "react";
import { isPermitted } from "pages/Applications/permissionHelpers";
import { isPermitted } from "@appsmith/utils/permissionHelpers";
import { useDispatch } from "react-redux";
import { setShowAppInviteUsersDialog } from "actions/applicationActions";
import {

View File

@ -0,0 +1,6 @@
export * from "ce/utils/permissionHelpers";
import { PERMISSION_TYPE as CE_PERMISSION_TYPE } from "ce/utils/permissionHelpers";
export const PERMISSION_TYPE = {
...CE_PERMISSION_TYPE,
};

View File

@ -14,7 +14,7 @@ import { getCurrentApplication } from "selectors/applicationSelectors";
import {
isPermitted,
PERMISSION_TYPE,
} from "../Applications/permissionHelpers";
} from "@appsmith/utils/permissionHelpers";
import { builderURL } from "RouteBuilder";
import { getCanvasWidgetsStructure } from "selectors/entitiesSelector";
import equal from "fast-deep-equal/es6";

View File

@ -6,7 +6,7 @@ import { AUTH_LOGIN_URL } from "constants/routes";
import {
PERMISSION_TYPE,
isPermitted,
} from "pages/Applications/permissionHelpers";
} from "@appsmith/utils/permissionHelpers";
import {
getCurrentApplication,
getCurrentPageId,

View File

@ -18,7 +18,7 @@ import { ApplicationPayload } from "@appsmith/constants/ReduxActionConstants";
import {
isPermitted,
PERMISSION_TYPE,
} from "pages/Applications/permissionHelpers";
} from "@appsmith/utils/permissionHelpers";
import {
getInitialsAndColorCode,
getApplicationIcon,

View File

@ -2,7 +2,10 @@ import React, { useState, useMemo, useEffect } from "react";
import { useDispatch } from "react-redux";
import { useSelector } from "store";
import { getUserApplicationsWorkspaces } from "selectors/applicationSelectors";
import { isPermitted, PERMISSION_TYPE } from "./permissionHelpers";
import {
isPermitted,
PERMISSION_TYPE,
} from "@appsmith/utils/permissionHelpers";
import { ReduxActionTypes } from "@appsmith/constants/ReduxActionConstants";
import { AppState } from "@appsmith/reducers";
import {

View File

@ -36,7 +36,6 @@ import PageWrapper from "pages/common/PageWrapper";
import SubHeader from "pages/common/SubHeader";
import ApplicationCard from "./ApplicationCard";
import WorkspaceInviteUsersForm from "@appsmith/pages/workspace/WorkspaceInviteUsersForm";
import { isPermitted, PERMISSION_TYPE } from "./permissionHelpers";
import FormDialogComponent from "components/editorComponents/form/FormDialogComponent";
import { User } from "constants/userConstants";
import { getCurrentUser, selectFeatureFlags } from "selectors/usersSelectors";
@ -103,6 +102,10 @@ import { MOBILE_MAX_WIDTH } from "constants/AppConstants";
import urlBuilder from "entities/URLRedirect/URLAssembly";
import RepoLimitExceededErrorModal from "../Editor/gitSync/RepoLimitExceededErrorModal";
import { resetEditorRequest } from "actions/initActions";
import {
isPermitted,
PERMISSION_TYPE,
} from "@appsmith/utils/permissionHelpers";
const WorkspaceDropDown = styled.div<{ isMobile?: boolean }>`
display: flex;

View File

@ -1,16 +0,0 @@
export enum PERMISSION_TYPE {
CREATE_WORKSPACE = "create:workspaces",
MANAGE_WORKSPACE = "manage:workspaces",
CREATE_APPLICATION = "manage:workspaceApplications",
MANAGE_APPLICATION = "manage:applications",
EXPORT_APPLICATION = "export:applications",
READ_APPLICATION = "read:applications",
READ_WORKSPACE = "read:workspaces",
INVITE_USER_TO_WORKSPACE = "inviteUsers:workspace",
MAKE_PUBLIC_APPLICATION = "makePublic:applications",
PUBLISH_APPLICATION = "publish:workspaceApplications",
}
export const isPermitted = (permissions: string[], type: string) => {
return permissions.includes(type);
};

View File

@ -15,7 +15,7 @@ import { getExportAppAPIRoute } from "@appsmith/constants/ApiConstants";
import {
isPermitted,
PERMISSION_TYPE,
} from "../../Applications/permissionHelpers";
} from "@appsmith/utils/permissionHelpers";
import { getCurrentApplication } from "selectors/applicationSelectors";
import { Colors } from "constants/Colors";
import { setIsGitSyncModalOpen } from "actions/gitSyncActions";

View File

@ -8,7 +8,7 @@ import { CopyToClipboard } from "design-system";
import {
isPermitted,
PERMISSION_TYPE,
} from "../Applications/permissionHelpers";
} from "@appsmith/utils/permissionHelpers";
import WorkspaceInviteUsersForm, {
InviteButtonWidth,
} from "@appsmith/pages/workspace/WorkspaceInviteUsersForm";

View File

@ -14,7 +14,7 @@ import { GitApplicationMetadata } from "api/ApplicationApi";
import {
isPermitted,
PERMISSION_TYPE,
} from "pages/Applications/permissionHelpers";
} from "@appsmith/utils/permissionHelpers";
const fuzzySearchOptions = {
keys: ["applications.name", "workspace.name"],

View File

@ -1,7 +1,7 @@
import {
isPermitted,
PERMISSION_TYPE,
} from "pages/Applications/permissionHelpers";
} from "@appsmith/utils/permissionHelpers";
import { AppState } from "@appsmith/reducers";
import { createSelector } from "reselect";
import { getUserApplicationsWorkspaces } from "./applicationSelectors";

View File

@ -3,7 +3,7 @@ import { User } from "constants/userConstants";
import { PropertyPanePositionConfig } from "reducers/uiReducers/usersReducer";
export const getCurrentUser = (state: AppState): User | undefined =>
state.ui.users.currentUser;
state.ui?.users?.currentUser;
export const getUserAuthError = (state: AppState): string =>
state.ui.users.error;
export const getUsers = (state: AppState): User[] => state.ui.users.users;

View File

@ -14,7 +14,7 @@ import { Workspace } from "constants/workspaceConstants";
import {
isPermitted,
PERMISSION_TYPE,
} from "pages/Applications/permissionHelpers";
} from "@appsmith/utils/permissionHelpers";
import moment from "moment";
import { extraLibrariesNames, isDynamicValue } from "./DynamicBindingUtils";
import { ApiResponse } from "api/ApiResponses";