원클릭으로
umbraco-conditions
Understand and use conditions in Umbraco backoffice (foundational concept)
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Understand and use conditions in Umbraco backoffice (foundational concept)
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Implement UFM (Umbraco Flavored Markdown) components in Umbraco backoffice using official docs
Add a new Umbraco extension project reference to the main Umbraco instance and solution
Understand and use localization in Umbraco backoffice (foundational concept)
Implement property editor UIs in Umbraco backoffice using official docs
Quick setup for Umbraco extension development - creates instance, extension, and registers it
Review checks reference for validating Umbraco backoffice extensions
| name | umbraco-conditions |
| description | Understand and use conditions in Umbraco backoffice (foundational concept) |
| version | 1.0.0 |
| location | managed |
| allowed-tools | Read, Write, Edit, WebFetch |
Extension Conditions enable developers to declare requirements that must be met before an extension becomes available in the backoffice. They function as gatekeeping mechanisms controlling when and where extensions appear based on context like section, workspace, user permissions, or content type. Multiple conditions use AND logic—all must pass for the extension to display.
Always fetch the latest docs before implementing:
The Umbraco source includes a working example:
Location: /Umbraco-CMS/src/Umbraco.Web.UI.Client/examples/entity-content-type-condition/
This example demonstrates a custom condition that checks entity content type. Study this for patterns on creating custom conditions.
{
"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"
}
]
}
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"
}
]
}
Section Conditions:
Umb.Condition.SectionAlias - Match current sectionUmb.Condition.SectionUserPermission - User has section accessWorkspace Conditions:
Umb.Condition.WorkspaceAlias - Match current workspaceUmb.Condition.WorkspaceEntityType - Match entity type (document, media, etc.)Umb.Condition.WorkspaceContentTypeAlias - Match content type aliasUmb.Condition.WorkspaceHasCollection - Workspace has collectionUser Permission Conditions:
Umb.Condition.UserPermission.Document - Document permissionsUmb.Condition.CurrentUser.IsAdmin - User is adminUmb.Condition.CurrentUser.GroupId - User in specific groupGatekeeping: Conditions control extension availability
AND Logic: All conditions must pass for extension to appear
Match Property: Value to compare against (alias, entity type, etc.)
Permitted State: Boolean indicating if condition passes
Custom Conditions: Implement UmbConditionBase and set this.permitted
Use Cases:
That's it! Always fetch fresh docs, keep examples minimal, generate complete working code.