feat: support data source permission tabs extension (#5268)

* feat: support data source permission tabs extension

* Update index.tsx
This commit is contained in:
chenos 2024-09-18 10:08:31 +08:00 committed by GitHub
parent 8bbf6bc65b
commit d1bbede789
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
3 changed files with 23 additions and 7 deletions

View File

@ -7,17 +7,19 @@
* For more information, please refer to: https://www.nocobase.com/agreement.
*/
import { Spin } from 'antd';
import React, { createContext, useContext } from 'react';
import {
useRequest,
SchemaComponent,
SchemaComponentContext,
SettingCenterPermissionProvider,
usePlugin,
useRecord,
useRequest,
} from '@nocobase/client';
import { dataSourceSchema } from './schemas/dataSourceTable';
import { Spin } from 'antd';
import React, { createContext, useContext } from 'react';
import PluginDataSourceManagerClient from '../..';
import { PermissionProvider } from './PermisionProvider';
import { dataSourceSchema } from './schemas/dataSourceTable';
const AvailableActionsContext = createContext([]);
AvailableActionsContext.displayName = 'AvailableActionsContext';
@ -41,12 +43,13 @@ export const useAvailableActions = () => {
export const DataSourceTable = () => {
const record = useRecord();
const plugin = usePlugin(PluginDataSourceManagerClient);
return (
<div>
<SchemaComponentContext.Provider value={{ designable: false }}>
<AvailableActionsProver>
<SchemaComponent
schema={dataSourceSchema}
schema={dataSourceSchema(plugin.getExtendedTabs())}
components={{ SettingCenterPermissionProvider, PermissionProvider }}
scope={{ dataSourceKey: record.key }}
/>

View File

@ -40,7 +40,7 @@ const collection = {
],
};
export const dataSourceSchema: ISchema = {
export const dataSourceSchema = (tabs = {}): ISchema => ({
type: 'object',
properties: {
block1: {
@ -161,6 +161,7 @@ export const dataSourceSchema: ISchema = {
roleCollectionsSchema,
},
},
...tabs,
},
},
},
@ -176,4 +177,4 @@ export const dataSourceSchema: ISchema = {
},
},
},
};
});

View File

@ -9,6 +9,7 @@
import { Plugin } from '@nocobase/client';
import PluginACLClient from '@nocobase/plugin-acl/client';
import { uid } from '@nocobase/utils/client';
import React from 'react';
import { DatabaseConnectionProvider } from './DatabaseConnectionProvider';
import { ThirdDataSource } from './ThridDataSource';
@ -21,6 +22,17 @@ import { NAMESPACE } from './locale';
export class PluginDataSourceManagerClient extends Plugin {
types = new Map();
extendedTabs = {};
getExtendedTabs() {
return this.extendedTabs;
}
registerPermissionTab(schema) {
this.extendedTabs[uid()] = schema;
}
async load() {
// register a configuration item in the Users & Permissions management page
this.app.pm.get(PluginACLClient).settingsUI.addPermissionsTab(({ t, TabLayout, role }) => ({