关于 umbraco-current-user-action
用于在 Umbraco 后台的当前用户菜单中创建操作的技能,面向扩展开发者。它涵盖文档查阅、需求确认,以及生成清单和操作实现。
主要功能
- 01用户菜单操作清单
- 02链接或可执行操作
- 03自定义元素操作
- 04按条件控制操作显示
- 05先查阅文档的工作流
适用场景
- 01添加个人资料或偏好设置入口
- 02从用户菜单执行自定义代码
- 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。
文档
实现前请务必获取最新文档:
- 扩展类型:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-types
- 基础:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation
- 扩展注册表:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-registry
相关基础技能
-
条件:用于控制操作的显示时机
- 参考技能:
umbraco-conditions
- 参考技能:
-
模态框:操作会打开模态对话框时使用
- 参考技能:
umbraco-modals
- 参考技能:
工作流
- 获取文档 - 对上面的 URL 使用 WebFetch
- 提问 - 要执行什么操作?是跳转还是执行?是否需要设置条件?
- 生成文件 - 根据最新文档创建清单 + 操作类
- 说明 - 展示创建的内容以及测试方法
最小示例
默认类型的清单(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