用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/umbraco/Umbraco-CMS-Backoffice-Skills --skill umbraco-current-user-action命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
正在显示 SKILL.md
基于 SOC 职业分类
| name | umbraco-current-user-action |
| description | Implement current user actions in Umbraco backoffice using official docs |
| version | 1.0.0 |
| location | managed |
| allowed-tools | Read, Write, Edit, WebFetch |
Current User Actions appear in the user menu (accessed by clicking the user avatar in the top-right corner of the backoffice). They provide quick actions for the currently logged-in user, such as profile settings, preferences, or custom functionality. Actions can execute code or navigate to a URL.
Always fetch the latest docs before implementing:
Conditions: For controlling when actions appear
umbraco-conditionsModals: When actions open modal dialogs
umbraco-modalsimport 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];
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> {}
}
| Property | Description |
|---|---|
icon | Icon displayed in the menu |
label | Text displayed in the menu |
| Method | Description |
|---|---|
getHref() | Returns URL for link-based actions |
execute() | Called when action is clicked (if no href) |
That's it! Always fetch fresh docs, keep examples minimal, generate complete working code.
Run tests from skill examples and generate a report (project)
Validate links and references in SKILL.md files using deterministic scripts
Umbraco backoffice extension customisation - complete working examples showing how extension types combine