From a18f62179f3c48fd3bf18bece582bd231512cba8 Mon Sep 17 00:00:00 2001 From: Faran Javed Date: Sat, 21 Mar 2026 00:18:37 +0500 Subject: [PATCH] [Fix]: #2133 Data Source access control --- .../DatasourcePermissionDialog.tsx | 51 +++++++++++++++++++ .../redux/sagas/datasourcePermissionSagas.ts | 9 ++-- 2 files changed, 55 insertions(+), 5 deletions(-) diff --git a/client/packages/lowcoder/src/components/PermissionDialog/DatasourcePermissionDialog.tsx b/client/packages/lowcoder/src/components/PermissionDialog/DatasourcePermissionDialog.tsx index 41273467a7..4f11a03d70 100644 --- a/client/packages/lowcoder/src/components/PermissionDialog/DatasourcePermissionDialog.tsx +++ b/client/packages/lowcoder/src/components/PermissionDialog/DatasourcePermissionDialog.tsx @@ -14,6 +14,44 @@ import { getDataSourcePermissionInfo } from "../../redux/selectors/datasourceSel import { StyledLoading } from "./commonComponents"; import { PermissionRole } from "./Permission"; import { getUser } from "../../redux/selectors/usersSelectors"; +import styled from "styled-components"; +import { TacoButton } from "components/button"; +import { AddIcon } from "icons"; +import { GreyTextColor } from "constants/style"; + +const BottomWrapper = styled.div` + margin: 12px 16px 0 16px; + display: flex; + justify-content: flex-start; +`; + +const AddPermissionButton = styled(TacoButton)` + &, + &:hover, + &:focus { + border: none; + box-shadow: none; + padding: 0; + display: flex; + align-items: center; + font-size: 14px; + line-height: 14px; + background: #ffffff; + transition: unset; + } + + svg { + margin-right: 4px; + } + + &:hover { + color: #315efb; + + svg g path { + fill: #315efb; + } + } +`; export const DatasourcePermissionDialog = (props: { datasourceId: string; @@ -85,6 +123,19 @@ export const DatasourcePermissionDialog = (props: { } return list; }} + viewFooterRender={(_primaryModelProps, stepProps) => ( + + } + onClick={() => { + stepProps.next(); + }} + > + {trans("home.addMember")} + + + )} addPermission={(userIds, groupIds, role, onSuccess) => { dispatch( grantDatasourcePermission( diff --git a/client/packages/lowcoder/src/redux/sagas/datasourcePermissionSagas.ts b/client/packages/lowcoder/src/redux/sagas/datasourcePermissionSagas.ts index 171bc78716..2762be50f6 100644 --- a/client/packages/lowcoder/src/redux/sagas/datasourcePermissionSagas.ts +++ b/client/packages/lowcoder/src/redux/sagas/datasourcePermissionSagas.ts @@ -10,18 +10,17 @@ import { validateResponse } from "api/apiUtils"; import log from "loglevel"; import { messageInstance } from "lowcoder-design/src/components/GlobalInstances"; -import { LibraryQuery } from "../../api/queryLibraryApi"; import { DeleteDatasourcePermissionPayload, FetchDatasourcePermissionsPayload, GrantDatasourcePermissionPayload, UpdateDatasourcePermissionPayload, } from "../reduxActions/datasourcePermissionActions"; -import { DatasourcePermissionApi } from "../../api/datasourcePermissionApi"; +import { DatasourcePermissionApi, DatasourcePermissionInfo } from "../../api/datasourcePermissionApi"; function* fetchPermissionsSaga(action: ReduxAction) { try { - const response: AxiosResponse> = + const response: AxiosResponse> = yield DatasourcePermissionApi.fetchPermissions(action.payload.datasourceId); const isValidResponse: boolean = validateResponse(response); if (isValidResponse) { @@ -61,13 +60,13 @@ function* grantPermissionSaga( function* updatePermissionSaga(action: ReduxAction) { try { - const response: AxiosResponse> = + const response: AxiosResponse> = yield DatasourcePermissionApi.updatePermission(action.payload); const isValidResponse: boolean = validateResponse(response); if (isValidResponse) { yield put({ - type: ReduxActionTypes.UPDATE_QUERY_LIBRARY_SUCCESS, + type: ReduxActionTypes.UPDATE_DATASOURCE_PERMISSION_SUCCESS, payload: action.payload, }); }