umbraco-current-user-action by umbraco/umbraco-cms-backoffice-skills
npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-current-user-action当前用户操作显示在用户菜单中(通过点击后台界面右上角的用户头像访问)。它们为当前登录用户提供快速操作,例如个人资料设置、首选项或自定义功能。操作可以执行代码或导航到 URL。
在实现之前,请务必获取最新文档:
条件 : 用于控制操作何时出现
umbraco-conditions模态框 : 当操作打开模态对话框时
umbraco-modals广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
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];
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> {
// 返回 undefined 以使用 execute() 方法
return undefined;
}
async execute(): Promise<void> {
// 执行操作
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> {
// 当 getHref 返回值时,此方法不会被调用
}
}
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',
// 仅对管理员用户显示
},
],
};
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> {
// 导航到后台路由
return '/section/settings/workspace/user-profile';
}
async execute(): Promise<void> {}
}
| 属性 | 描述 |
|---|---|
icon | 菜单中显示的图标 |
label | 菜单中显示的文本 |
| 方法 | 描述 |
|---|---|
getHref() | 返回基于链接的操作的 URL |
execute() | 当操作被点击时调用(如果没有 href) |
就是这样!请务必获取最新文档,保持示例简洁,生成完整可用的代码。
每周安装数
77
代码仓库
GitHub 星标数
17
首次出现
2026年2月4日
安全审计
安装于
github-copilot55
cursor25
opencode24
codex24
gemini-cli21
amp21
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.
Weekly Installs
77
Repository
GitHub Stars
17
First Seen
Feb 4, 2026
Security Audits
Gen Agent Trust HubFailSocketPassSnykWarn
Installed on
github-copilot55
cursor25
opencode24
codex24
gemini-cli21
amp21
React 组合模式指南:Vercel 组件架构最佳实践,提升代码可维护性
120,000 周安装