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

View File

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

View File

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