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 Current User Action

これは何ですか?

Current User Actions はユーザーメニュー(バックオフィスの右上隅にあるユーザーアバターをクリックしてアクセス)に表示されます。これらは、プロフィール設定、環境設定、カスタム機能など、現在ログインしているユーザー向けのクイックアクションを提供します。アクションはコードを実行したり、URL に遷移したりできます。

ドキュメント

実装する前に、常に最新のドキュメントを取得してください:

関連する Foundation スキル

  • Conditions: アクションを表示するタイミングを制御するため

    • 参照スキル: umbraco-conditions
  • Modals: アクションがモーダルダイアログを開く場合

    • 参照スキル: umbraco-modals

ワークフロー

  1. ドキュメントを取得 - 上記の URL に対して WebFetch を使用します
  2. 質問する - どのようなアクションですか? 遷移または実行? 条件は必要ですか?
  3. ファイルを生成 - 最新のドキュメントに基づいてマニフェスト + アクションクラスを作成します
  4. 説明 - 作成された内容とテスト方法を示します

最小限の例

デフォルト Kind を使用したマニフェスト (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> {}
}

メタプロパティ(デフォルト Kind)

プロパティ説明
iconメニューに表示されるアイコン
labelメニューに表示されるテキスト

アクションインターフェース

メソッド説明
getHref()リンクベースのアクションの URL を返します
execute()アクションがクリックされたときに呼び出されます(href がない場合)

以上です! 常に最新のドキュメントを取得し、例は最小限に保ち、完全に動作するコードを生成してください。

コメント