mcpField
U
umbraco-granular-user-permissions

umbraco-granular-user-permissions

github.com/umbraco安全27389 次安装6 周前更新
代码仓库

关于 umbraco-granular-user-permissions

用于在 Umbraco 中实现实体级用户权限的技能,指导创建细粒度权限清单和元素,为特定内容、媒体或成员实体设置访问控制。

主要功能

  1. 01按实体配置权限
  2. 02生成细粒度权限清单
  3. 03创建自定义权限元素
  4. 04支持文档、媒体和成员
  5. 05提供文档与示例参考

适用场景

  1. 01为单个内容节点设置不同访问权限
  2. 02为特定媒体项创建权限
  3. 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 中的特定实体类型创建自定义权限控制。与适用于所有实例的通用实体权限不同,细粒度权限可以按实体配置,从而实现精细的访问控制。这通常用于文档权限,不同用户可以对不同内容节点拥有不同权限。

文档

实施前务必获取最新文档:

参考示例

Umbraco 源代码中包含一个可运行的示例:

位置:/Umbraco-CMS/src/Umbraco.Web.UI.Client/examples/user-permission/

此示例展示了细粒度用户权限的实现方式。请参考此示例,了解生产环境中的实践模式。

相关基础功能技能

  • 条件:控制权限可见性时使用

    • 参考技能:umbraco-conditions
  • 上下文 API:访问用户或工作区上下文时使用

    • 参考技能:umbraco-context-api

工作流

  1. 获取文档 - 对上述 URL 使用 WebFetch
  2. 提问 - 实体类型是什么?有哪些权限?架构类型是什么?
  3. 生成文件 - 根据最新文档创建清单和元素
  4. 说明 - 展示创建的内容以及测试方法

最小示例

清单(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