mcpField
U
umbraco-current-user-action

umbraco-current-user-action

github.com/umbraco开发27388 次安装6 周前更新
代码仓库

关于 umbraco-current-user-action

用于在 Umbraco 后台的当前用户菜单中创建操作的技能,面向扩展开发者。它涵盖文档查阅、需求确认,以及生成清单和操作实现。

主要功能

  1. 01用户菜单操作清单
  2. 02链接或可执行操作
  3. 03自定义元素操作
  4. 04按条件控制操作显示
  5. 05先查阅文档的工作流

适用场景

  1. 01添加个人资料或偏好设置入口
  2. 02从用户菜单执行自定义代码
  3. 03按条件显示操作

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-current-user-action

安装后在 Claude Code 中输入/umbraco-current-user-action确认已加载。

详细介绍

Umbraco 当前用户操作

这是什么?

当前用户操作会显示在用户菜单中(在后台右上角点击用户头像即可访问)。它们为当前登录用户提供快捷操作,例如个人资料设置、偏好设置或自定义功能。操作可以执行代码或跳转到 URL。

文档

实现前请务必获取最新文档:

相关基础技能

  • 条件:用于控制操作的显示时机

    • 参考技能:umbraco-conditions
  • 模态框:操作会打开模态对话框时使用

    • 参考技能:umbraco-modals

工作流

  1. 获取文档 - 对上面的 URL 使用 WebFetch
  2. 提问 - 要执行什么操作?是跳转还是执行?是否需要设置条件?
  3. 生成文件 - 根据最新文档创建清单 + 操作类
  4. 说明 - 展示创建的内容以及测试方法

最小示例

默认类型的清单(manifests.ts)
import type { ManifestCurrentUserActionDefaultKind } from '@umbraco-cms/backoffice/extension-registry';

const manifest: ManifestCurrentUserActionDefaultKind = {
  type: 'currentUserAction',
  kind: 'default',
  alias: 'My.CurrentUserAction.Preferences',
  name: 'User Preferences',
  api: () => import('./preferences-action.js'),
  meta: {
    icon: 'icon-settings',
    label: 'My Preferences',
  },
};

export const manifests = [manifest];
操作实现(preferences-action.ts)
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import type { UmbCurrentUserAction } from '@umbraco-cms/backoffice/current-user';

export class PreferencesAction extends UmbControllerBase implements UmbCurrentUserAction {
  async getHref(): Promise<string | undefined> {
    // Return undefined to use execute() instead
    return undefined;
  }

  async execute(): Promise<void> {
    // Perform the action
    console.log('Opening preferences...');
  }
}

export default PreferencesAction;
基于链接的操作
export class ExternalLinkAction extends UmbControllerBase implements UmbCurrentUserAction {
  async getHref(): Promise<string | undefined> {
    return 'https://docs.umbraco.com';
  }

  async execute(): Promise<void> {
    // Not called when getHref returns a value
  }
}
打开模态框的操作
import { UmbControllerBase } from '@umbraco-cms/backoffice/class-api';
import { UMB_MODAL_MANAGER_CONTEXT } from '@umbraco-cms/backoffice/modal';
import type { UmbCurrentUserAction } from '@umbraco-cms/backoffice/current-user';

export class SettingsAction extends UmbControllerBase implements UmbCurrentUserAction {
  async getHref(): Promise<string | undefined> {
    return undefined;
  }

  async execute(): Promise<void> {
    const modalManager = await this.getContext(UMB_MODAL_MANAGER_CONTEXT);

    const modal = modalManager.open(this, MY_SETTINGS_MODAL, {
      data: {},
    });

    await modal.onSubmit();
  }
}

export default SettingsAction;
带条件的操作
const manifest: ManifestCurrentUserActionDefaultKind = {
  type: 'currentUserAction',
  kind: 'default',
  alias: 'My.CurrentUserAction.Admin',
  name: 'Admin Settings',
  api: () => import('./admin-action.js'),
  meta: {
    icon: 'icon-lock',
    label: 'Admin Settings',
  },
  conditions: [
    {
      alias: 'Umb.Condition.UserPermission.Admin',
      // Only show for admin users
    },
  ],
};
自定义元素操作
import type { ManifestCurrentUserAction } from '@umbraco-cms/backoffice/extension-registry';

const manifest: ManifestCurrentUserAction = {
  type: 'currentUserAction',
  alias: 'My.CurrentUserAction.Custom',
  name: 'Custom Action',
  element: () => import('./custom-action.element.js'),
  api: () => import('./custom-action.js'),
  meta: {},
};
跳转到内部路由
export class ProfileAction extends UmbControllerBase implements UmbCurrentUserAction {
  async getHref(): Promise<string | undefined> {
    // Navigate to a backoffice route
    return '/section/settings/workspace/user-profile';
  }

  async execute(): Promise<void> {}
}

元属性(默认类型)

属性说明
icon菜单中显示的图标
label菜单中显示的文本

操作接口

方法说明
getHref()返回基于链接的操作所用的 URL
execute()点击操作时调用(如果没有 href)

就是这样!务必获取最新文档,保持示例精简,并生成完整可用的代码。

评论

支持 Markdown