umbraco-conditions について
Umbraco のバックオフィス拡張を開発する人向けのスキルです。コンテキストや権限に応じた表示条件の設定と、組み込み条件や独自条件の実装を案内します。
主な機能
- 01コンテキストに応じた拡張の表示制御
- 02AND ロジックでの条件の組み合わせ
- 03セクションとワークスペースの条件
- 04ユーザー権限の確認
- 05独自条件の実装
活用シーン
- 01指定したセクションだけにダッシュボードを表示
- 02特定のコンテンツタイプに操作を制限
- 03管理者に機能の利用を限定
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ umbraco/ umbraco-cms-backoffice-skills --skill umbraco-conditionsインストール後、Claude Code で/umbraco-conditionsを入力して読み込まれたか確認します。
詳細
Umbraco 条件
これは何ですか?
拡張条件を使用すると、開発者はバックオフィスで拡張機能が利用可能になる前に満たす必要がある要件を宣言できます。これらは、セクション、ワークスペース、ユーザー権限、コンテンツタイプなどのコンテキストに基づいて、拡張機能がいつ、どこに表示されるかを制御するゲートキーピングの仕組みとして機能します。複数の条件は AND ロジックを使用します。拡張機能を表示するには、すべての条件を満たす必要があります。
ドキュメント
実装する前に、常に最新のドキュメントを取得してください:
- メインドキュメント: https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-conditions
- 拡張タイプ: 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
参照例
Umbraco のソースには動作する例が含まれています:
場所: /Umbraco-CMS/src/Umbraco.Web.UI.Client/examples/entity-content-type-condition/
この例では、エンティティのコンテンツタイプをチェックするカスタム条件を実演しています。カスタム条件を作成する際のパターンについて、これを参考にしてください。
ワークフロー
- ドキュメントを取得 - 上記の URL で WebFetch を使用します
- 質問する - 何が表示を制限しますか?セクション?ワークスペース?ユーザー?コンテンツタイプ?
- コードを生成 - 最新のドキュメントに基づいてマニフェストに条件を追加します
- 説明 - 何が作成されたか、拡張機能がいつ表示されるかを示します
最小限の例
セクション条件
{
"type": "dashboard",
"alias": "My.Dashboard",
"name": "My Dashboard",
"conditions": [
{
"alias": "Umb.Condition.SectionAlias",
"match": "Umb.Section.Content"
}
]
}
ワークスペース条件
{
"type": "workspaceView",
"alias": "My.WorkspaceView",
"name": "My Workspace View",
"conditions": [
{
"alias": "Umb.Condition.WorkspaceAlias",
"match": "Umb.Workspace.Document"
}
]
}
複数の条件(AND ロジック)
const manifest = {
type: 'workspaceAction',
alias: 'My.WorkspaceAction',
name: 'My Action',
conditions: [
{
alias: 'Umb.Condition.SectionAlias',
match: 'Umb.Section.Content'
},
{
alias: 'Umb.Condition.WorkspaceAlias',
match: 'Umb.Workspace.Document'
},
{
alias: 'Umb.Condition.WorkspaceContentTypeAlias',
match: 'blogPost'
}
]
};
ユーザー権限条件
{
"type": "entityAction",
"alias": "My.DeleteAction",
"name": "Delete Document",
"conditions": [
{
"alias": "Umb.Condition.UserPermission.Document",
"match": "Umb.UserPermission.Document.Delete"
}
]
}
セクションユーザー権限
{
"type": "dashboard",
"alias": "My.AdminDashboard",
"name": "Admin Dashboard",
"conditions": [
{
"alias": "Umb.Condition.SectionUserPermission",
"match": "Umb.Section.Settings"
}
]
}
ワークスペースエンティティタイプ
{
"type": "workspaceView",
"alias": "My.View",
"name": "My View",
"conditions": [
{
"alias": "Umb.Condition.WorkspaceEntityType",
"match": "document"
}
]
}
コンテンツタイプ条件
{
"type": "workspaceView",
"alias": "My.BlogView",
"name": "Blog Post View",
"conditions": [
{
"alias": "Umb.Condition.WorkspaceContentTypeAlias",
"match": "blogPost"
}
]
}
ワークスペースにコレクションがある
{
"type": "workspaceAction",
"alias": "My.CollectionAction",
"name": "Collection Action",
"conditions": [
{
"alias": "Umb.Condition.WorkspaceHasCollection",
"match": true
}
]
}
カスタム条件の実装
import { UmbConditionBase } from '@umbraco-cms/backoffice/extension-api';
import { UmbControllerHost } from '@umbraco-cms/backoffice/controller-api';
export class MyCustomCondition extends UmbConditionBase<MyConditionConfig> {
constructor(host: UmbControllerHost, args: MyConditionConfig) {
super(host, args);
// Observe some context or state
this.consumeContext(SOME_CONTEXT, (context) => {
this.observe(context.someObservable, (value) => {
// Update permitted state based on value
this.permitted = value === this.args.expectedValue;
});
});
}
}
interface MyConditionConfig {
expectedValue: string;
}
カスタム条件の登録
export const manifests = [
{
type: 'condition',
name: 'My Custom Condition',
alias: 'My.Condition.Custom',
api: MyCustomCondition,
},
];
カスタム条件の使用
{
"type": "dashboard",
"alias": "My.Dashboard",
"name": "My Dashboard",
"conditions": [
{
"alias": "My.Condition.Custom",
"expectedValue": "someValue"
}
]
}
組み込み条件
セクション条件:
Umb.Condition.SectionAlias- 現在のセクションに一致Umb.Condition.SectionUserPermission- ユーザーがセクションへのアクセス権を持つ
ワークスペース条件:
Umb.Condition.WorkspaceAlias- 現在のワークスペースに一致Umb.Condition.WorkspaceEntityType- エンティティタイプ(ドキュメント、メディアなど)に一致Umb.Condition.WorkspaceContentTypeAlias- コンテンツタイプのエイリアスに一致Umb.Condition.WorkspaceHasCollection- ワークスペースにコレクションがある
ユーザー権限条件:
Umb.Condition.UserPermission.Document- ドキュメントの権限Umb.Condition.CurrentUser.IsAdmin- ユーザーが管理者であるUmb.Condition.CurrentUser.GroupId- ユーザーが特定のグループに属している
主要な概念
ゲートキーピング: 条件は拡張機能の可用性を制御します
AND ロジック: 拡張機能を表示するには、すべての条件を満たす必要があります
一致プロパティ: 比較対象となる値(エイリアス、エンティティタイプなど)
許可状態: 条件を満たすかどうかを示すブール値
カスタム条件: UmbConditionBase を実装し、this.permitted を設定します
ユースケース:
- コンテンツセクションにのみダッシュボードを表示する
- 特定のコンテンツタイプにのみアクションを表示する
- 管理者ユーザーにのみ機能を制限する
- ドキュメントワークスペースにのみビューを表示する
- 権限に基づいてアクションを有効にする
以上です!常に最新のドキュメントを取得し、例は最小限に保ち、完全に動作するコードを生成してください。