重要前提
安装AI Skills的关键前提是:必须科学上网,且开启TUN模式,这一点至关重要,直接决定安装能否顺利完成,在此郑重提醒三遍:科学上网,科学上网,科学上网。查看完整安装教程 →
umbraco-granular-user-permissions by umbraco/umbraco-cms-backoffice-skills
npx skills add https://github.com/umbraco/umbraco-cms-backoffice-skills --skill umbraco-granular-user-permissions细粒度用户权限允许您为 Umbraco 中的特定实体类型创建自定义权限控制。与适用于所有实例的通用实体权限不同,细粒度权限可以按实体进行配置,从而实现精细的访问控制。这通常用于文档权限,不同的用户可以在不同的内容节点上拥有不同的权限。
在实施前请务必获取最新文档:
Umbraco 源代码中包含一个可运行的示例:
位置 : /Umbraco-CMS/src/Umbraco.Web.UI.Client/examples/user-permission/
此示例演示了细粒度用户权限的实现。请研究此示例以了解生产环境下的模式。
条件 : 当控制权限可见性时
umbraco-conditions广告位招租
在这里展示您的产品或服务
触达数万 AI 开发者,精准高效
上下文 API : 当访问用户或工作区上下文时
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 模式类型
label?: string; // 显示标签(可使用本地化键)
labelKey?: string; // 标签的本地化键
description?: string; // 描述文本
descriptionKey?: string; // 描述的本地化键
}
document - 内容节点media - 媒体项member - 成员就是这样!请务必获取最新文档,保持示例简洁,并生成完整可运行的代码。
每周安装次数
71
代码仓库
GitHub 星标数
14
首次出现
2026年2月4日
安全审计
安装于
github-copilot52
cursor25
opencode23
codex23
gemini-cli21
amp21
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.
Weekly Installs
71
Repository
GitHub Stars
14
First Seen
Feb 4, 2026
Security Audits
Gen Agent Trust HubPassSocketPassSnykPass
Installed on
github-copilot52
cursor25
opencode23
codex23
gemini-cli21
amp21
Azure RBAC 权限管理工具:查找最小角色、创建自定义角色与自动化分配
148,200 周安装