ワンクリックで
umbraco-granular-user-permissions
Implement granular user permissions in Umbraco backoffice using official docs
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
メニュー
Implement granular user permissions in Umbraco backoffice using official docs
Codex または Claude でインストール この Prompt をコピーして Codex、Claude、または他のアシスタントに貼り付けると、Skill ページを確認してインストールできます。
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
SOC 職業分類に基づく
| name | umbraco-granular-user-permissions |
| description | Implement granular user permissions in Umbraco backoffice using official docs |
| version | 1.0.0 |
| location | managed |
| allowed-tools | Read, Write, Edit, WebFetch |
Granular User Permissions allow you to create custom permission controls for specific entity types in Umbraco. Unlike general entity permissions that apply to all instances, granular permissions can be configured per-entity, allowing fine-grained access control. This is commonly used for document permissions where different users can have different permissions on different content nodes.
Always fetch the latest docs before implementing:
The Umbraco source includes a working example:
Location: /Umbraco-CMS/src/Umbraco.Web.UI.Client/examples/user-permission/
This example demonstrates granular user permission implementation. Study this for production patterns.
Conditions: When controlling permission visibility
umbraco-conditionsContext API: When accessing user or workspace context
umbraco-context-apiimport type { ManifestGranularUserPermission } from '@umbraco-cms/backoffice/user-permission';
export const manifests: Array<ManifestGranularUserPermission> = [
{
type: 'userGranularPermission',
alias: 'My.GranularPermission.Custom',
name: 'Custom Granular Permission',
weight: 100,
forEntityTypes: ['my-entity-type'],
element: () => import('./my-granular-permission.element.js'),
meta: {
schemaType: 'MyPermissionPresentationModel',
label: 'Custom Permissions',
description: 'Configure custom permissions for this entity',
},
},
];
import { html, customElement, property, state } from '@umbraco-cms/backoffice/external/lit';
import { UmbLitElement } from '@umbraco-cms/backoffice/lit-element';
@customElement('my-granular-permission')
export class MyGranularPermissionElement extends UmbLitElement {
@property({ attribute: false })
value: unknown;
@state()
private _permissions: string[] = [];
override render() {
return html`
<uui-box headline="Custom Permissions">
<uui-checkbox
label="Can Edit"
@change=${(e: Event) => this.#onPermissionChange('edit', (e.target as HTMLInputElement).checked)}
></uui-checkbox>
<uui-checkbox
label="Can Delete"
@change=${(e: Event) => this.#onPermissionChange('delete', (e.target as HTMLInputElement).checked)}
></uui-checkbox>
</uui-box>
`;
}
#onPermissionChange(permission: string, enabled: boolean) {
if (enabled) {
this._permissions = [...this._permissions, permission];
} else {
this._permissions = this._permissions.filter(p => p !== permission);
}
this.dispatchEvent(new CustomEvent('change', { detail: { permissions: this._permissions } }));
}
}
export default MyGranularPermissionElement;
interface ManifestGranularUserPermission extends ManifestElement {
type: 'userGranularPermission';
forEntityTypes?: Array<string>;
meta: MetaGranularUserPermission;
}
interface MetaGranularUserPermission {
schemaType: string; // API schema type for serialization
label?: string; // Display label (can use localization key)
labelKey?: string; // Localization key for label
description?: string; // Description text
descriptionKey?: string; // Localization key for description
}
document - Content nodesmedia - Media itemsmember - MembersThat's it! Always fetch fresh docs, keep examples minimal, generate complete working code.