feat: code split permission helpers and added null check for some selectors (#17718)
This commit is contained in:
parent
8b419a177c
commit
62fb99929e
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -1,5 +1,5 @@
|
|||
import { AppState } from "@appsmith/reducers";
|
||||
|
||||
export const getTenantPermissions = (state: AppState) => {
|
||||
return state.tenant.userPermissions;
|
||||
return state.tenant?.userPermissions;
|
||||
};
|
||||
|
|
|
|||
50
app/client/src/ce/utils/permissionHelpers.tsx
Normal file
50
app/client/src/ce/utils/permissionHelpers.tsx
Normal 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);
|
||||
};
|
||||
|
|
@ -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 {
|
||||
|
|
|
|||
6
app/client/src/ee/utils/permissionHelpers.tsx
Normal file
6
app/client/src/ee/utils/permissionHelpers.tsx
Normal 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,
|
||||
};
|
||||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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 {
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
};
|
||||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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"],
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
|
|
|
|||
|
|
@ -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";
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user