logologo
开始
手册
开发
插件
API
English
简体中文
日本語
한국어
Deutsch
Français
Español
Português
Русский
Italiano
Türkçe
Українська
Tiếng Việt
Bahasa Indonesia
ไทย
Polski
Nederlands
Čeština
العربية
עברית
हिन्दी
Svenska
开始
手册
开发
插件
API
logologo
用户

角色和权限

角色配置
权限配置
在 UI 中应用
角色并集

开发指南

扩展权限配置栏

部门

部门管理
部门角色管理

用户数据同步

同步管理

数据源

企业微信
HTTP API

开发指南

扩展同步数据源
扩展同步目标资源
Previous Page角色并集
Next Page部门管理

#扩展权限配置栏

下面以“移动端菜单”配置项为例,演示如何扩展一个新的权限配置栏。效果如下图所示:

20240903210248

代码如下:

import { Plugin } from '@nocobase/client';
import PluginACLClient from '@nocobase/plugin-acl/client';

class PluginMobileClient extends Plugin {
  async load() {
    const aclInstance = this.app.pm.get(PluginACLClient);

    aclInstance?.settingsUI.addPermissionsTab(({ t, TabLayout, activeKey }) => ({
      key: 'mobile-menu',
      label: t('Mobile menu', {
        ns: 'plugin-mobile',
      }),
      children: (
        <TabLayout>
          <MenuPermissions />
        </TabLayout>
      ),
    }));
  }
}

首先,我们需要获取到 PluginACLClient 插件的实例(获取插件实例的其它方法),通过 settingsUI.addPermissionsTab 方法添加一个新的权限配置栏。在这个例子中,我们添加了一个名为“移动端菜单”的权限配置栏。

settingsUI 属性的值是一个名为 ACLSettingsUI 的类的实例,其类型信息如下:

import { TabsProps } from 'antd/es/tabs/index';

interface ACLSettingsUI {
  addPermissionsTab(tab: Tab | TabCallback): void;
  getPermissionsTabs(props: PermissionsTabsProps): Tab[];
}

type Tab = TabsProps['items'][0];

type TabCallback = (props: PermissionsTabsProps) => Tab;

interface PermissionsTabsProps {
  /**
   * the key of the currently active tab panel
   */
  activeKey: string;
  /**
   * the currently selected role
   */
  role: Role;
  /**
   * translation function
   */
  t: TFunction;
  /**
   * used to constrain the size of the container in the Tab
   */
  TabLayout: React.FC;
}