关于 umbraco-granular-user-permissions
用于在 Umbraco 中实现实体级用户权限的技能,指导创建细粒度权限清单和元素,为特定内容、媒体或成员实体设置访问控制。
主要功能
- 01按实体配置权限
- 02生成细粒度权限清单
- 03创建自定义权限元素
- 04支持文档、媒体和成员
- 05提供文档与示例参考
适用场景
- 01为单个内容节点设置不同访问权限
- 02为特定媒体项创建权限
- 03定义自定义成员级权限控制
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ umbraco/ umbraco-cms-backoffice-skills --skill umbraco-granular-user-permissions安装后在 Claude Code 中输入/umbraco-granular-user-permissions确认已加载。
详细介绍
Umbraco 细粒度用户权限
这是什么?
细粒度用户权限允许你为 Umbraco 中的特定实体类型创建自定义权限控制。与适用于所有实例的通用实体权限不同,细粒度权限可以按实体配置,从而实现精细的访问控制。这通常用于文档权限,不同用户可以对不同内容节点拥有不同权限。
文档
实施前务必获取最新文档:
- 基础功能:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/foundation
- 扩展注册表:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-registry
- 用户权限:https://docs.umbraco.com/umbraco-cms/extend-your-project/backoffice-extensions/extending-overview/extension-types
参考示例
Umbraco 源代码中包含一个可运行的示例:
位置:/Umbraco-CMS/src/Umbraco.Web.UI.Client/examples/user-permission/
此示例展示了细粒度用户权限的实现方式。请参考此示例,了解生产环境中的实践模式。
相关基础功能技能
-
条件:控制权限可见性时使用
- 参考技能:
umbraco-conditions
- 参考技能:
-
上下文 API:访问用户或工作区上下文时使用
- 参考技能:
umbraco-context-api
- 参考技能:
工作流
- 获取文档 - 对上述 URL 使用 WebFetch
- 提问 - 实体类型是什么?有哪些权限?架构类型是什么?
- 生成文件 - 根据最新文档创建清单和元素
- 说明 - 展示创建的内容以及测试方法
最小示例
清单(manifests.ts)
import 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',
},
},
];
元素实现(my-granular-permission.element.ts)
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- 内容节点media- 媒体项member- 成员
就是这样!务必获取最新文档,保持示例精简,并生成完整可运行的代码。
评论
支持 Markdown