+
} />
-
{fieldSchema.title}
+
{title}
) : (
{title}
@@ -61,13 +61,15 @@ export const WorkbenchAction = withDynamicSchemaProps((props) => {
const fieldSchema = useFieldSchema();
const Component = useComponent(props?.targetComponent) || Action;
return (
-
}
- confirmTitle={fieldSchema.title}
- />
+
+ }
+ confirmTitle={fieldSchema.title}
+ />
+
);
});
diff --git a/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchCustomRequestActionSchemaInitializerItem.tsx b/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchCustomRequestActionSchemaInitializerItem.tsx
index 9b1da436a0..833cce7a8e 100644
--- a/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchCustomRequestActionSchemaInitializerItem.tsx
+++ b/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchCustomRequestActionSchemaInitializerItem.tsx
@@ -13,6 +13,7 @@ import {
SchemaSettingsActionLinkItem,
useSchemaInitializer,
ModalActionSchemaInitializerItem,
+ SchemaSettingAccessControl,
} from '@nocobase/client';
import React from 'react';
import { useTranslation } from 'react-i18next';
@@ -30,6 +31,12 @@ export const workbenchActionSettingsCustomRequest = new SchemaSettings({
name: 'editLink',
Component: SchemaSettingsActionLinkItem,
},
+ {
+ ...SchemaSettingAccessControl,
+ useVisible() {
+ return true;
+ },
+ },
{
sort: 800,
name: 'd1',
diff --git a/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchLinkActionSchemaInitializerItem.tsx b/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchLinkActionSchemaInitializerItem.tsx
index b7aa1e2a78..7b17a862f6 100644
--- a/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchLinkActionSchemaInitializerItem.tsx
+++ b/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchLinkActionSchemaInitializerItem.tsx
@@ -14,6 +14,7 @@ import {
useSchemaInitializer,
useSchemaInitializerItem,
ModalActionSchemaInitializerItem,
+ SchemaSettingAccessControl,
} from '@nocobase/client';
import React from 'react';
import { useTranslation } from 'react-i18next';
@@ -32,6 +33,12 @@ export const workbenchActionSettingsLink = new SchemaSettings({
name: 'editLink',
Component: SchemaSettingsActionLinkItem,
},
+ {
+ ...SchemaSettingAccessControl,
+ useVisible() {
+ return true;
+ },
+ },
{
sort: 800,
name: 'd1',
diff --git a/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchPopupActionSchemaInitializerItem.tsx b/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchPopupActionSchemaInitializerItem.tsx
index f49beda7d3..3d1e7b09c5 100644
--- a/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchPopupActionSchemaInitializerItem.tsx
+++ b/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchPopupActionSchemaInitializerItem.tsx
@@ -14,6 +14,7 @@ import {
useSchemaInitializer,
useOpenModeContext,
ModalActionSchemaInitializerItem,
+ SchemaSettingAccessControl,
} from '@nocobase/client';
import React from 'react';
import { useTranslation } from 'react-i18next';
@@ -44,6 +45,12 @@ export const workbenchActionSettingsPopup = new SchemaSettings({
};
},
},
+ {
+ ...SchemaSettingAccessControl,
+ useVisible() {
+ return true;
+ },
+ },
{
sort: 800,
name: 'd1',
diff --git a/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchScanActionSchemaInitializerItem.tsx b/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchScanActionSchemaInitializerItem.tsx
index de32050e93..47f2c87587 100644
--- a/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchScanActionSchemaInitializerItem.tsx
+++ b/packages/plugins/@nocobase/plugin-block-workbench/src/client/WorkbenchScanActionSchemaInitializerItem.tsx
@@ -14,6 +14,7 @@ import {
useSchemaInitializer,
useSchemaInitializerItem,
ModalActionSchemaInitializerItem,
+ SchemaSettingAccessControl,
} from '@nocobase/client';
import React from 'react';
import { useTranslation } from 'react-i18next';
@@ -28,6 +29,12 @@ export const workbenchActionSettingsScanQrCode = new SchemaSettings({
return { hasIconColor: true };
},
},
+ {
+ ...SchemaSettingAccessControl,
+ useVisible() {
+ return true;
+ },
+ },
{
name: 'd1',
type: 'divider',
diff --git a/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/view/view-collection.test.ts b/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/view/view-collection.test.ts
index f7728fc08d..ac45d9077b 100644
--- a/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/view/view-collection.test.ts
+++ b/packages/plugins/@nocobase/plugin-data-source-main/src/server/__tests__/view/view-collection.test.ts
@@ -264,7 +264,7 @@ describe('view collection', function () {
const Role = await collectionRepository.create({
values: {
- name: 'roles',
+ name: 'my_roles',
fields: [{ name: 'name', type: 'string' }],
},
context: {},
@@ -276,7 +276,7 @@ describe('view collection', function () {
values: [{ name: 'u1' }, { name: 'u2' }],
});
- await db.getRepository('roles').create({
+ await db.getRepository('my_roles').create({
values: [{ name: 'r1' }, { name: 'r2' }],
});
@@ -327,7 +327,7 @@ describe('view collection', function () {
collectionName: 'users',
name: 'roles',
type: 'belongsToMany',
- target: 'roles',
+ target: 'my_roles',
through: 'test_view',
foreignKey: 'user_id',
otherKey: 'role_id',
diff --git a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/client/index.ts b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/client/index.ts
index 52dbe9d66b..3977dad7b5 100644
--- a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/client/index.ts
+++ b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/client/index.ts
@@ -8,7 +8,6 @@
*/
import { Plugin } from '@nocobase/client';
-
class PluginUISchemaStorageClient extends Plugin {
async load() {}
}
diff --git a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/collections/uiButtonSchemasRoles.ts b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/collections/uiButtonSchemasRoles.ts
new file mode 100644
index 0000000000..27e6f9b8b5
--- /dev/null
+++ b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/collections/uiButtonSchemasRoles.ts
@@ -0,0 +1,16 @@
+/**
+ * This file is part of the NocoBase (R) project.
+ * Copyright (c) 2020-2024 NocoBase Co., Ltd.
+ * Authors: NocoBase Team.
+ *
+ * This project is dual-licensed under AGPL-3.0 and NocoBase Commercial License.
+ * For more information, please refer to: https://www.nocobase.com/agreement.
+ */
+
+import { defineCollection } from '@nocobase/database';
+
+export default defineCollection({
+ name: 'uiButtonSchemasRoles',
+ dumpRules: 'required',
+ migrationRules: ['overwrite', 'schema-only'],
+});
diff --git a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/collections/uiSchemas.ts b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/collections/uiSchemas.ts
index cd39ac8c45..8bffeae2a5 100644
--- a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/collections/uiSchemas.ts
+++ b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/collections/uiSchemas.ts
@@ -39,5 +39,16 @@ export default {
name: 'schema',
defaultValue: {},
},
+ {
+ type: 'belongsToMany',
+ name: 'roles',
+ onDelete: 'CASCADE',
+ through: 'uiButtonSchemasRoles',
+ target: 'roles',
+ foreignKey: 'uid',
+ otherKey: 'roleName',
+ sourceKey: 'x-uid',
+ targetKey: 'name',
+ },
],
} as CollectionOptions;
diff --git a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/server.ts b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/server.ts
index e1b7157b85..1ad9a34e0a 100644
--- a/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/server.ts
+++ b/packages/plugins/@nocobase/plugin-ui-schema-storage/src/server/server.ts
@@ -42,7 +42,7 @@ export class PluginUISchemaStorageServer extends Plugin {
this.app.acl.registerSnippet({
name: 'ui.uiSchemas',
- actions: ['uiSchemas:*'],
+ actions: ['uiSchemas:*', 'uiSchemas.roles:list', 'uiSchemas.roles:set'],
});
db.on('uiSchemas.beforeCreate', function setUid(model) {