试图隐藏内容类型的内容部分

Trying to hide Content Parts on Content Type

我正在构建内容类型并添加特定于客户和代理人的内容部分。所有这些部分都有字段 and/or 内容选择器等

我想限制客户角色只能看到客户内容部分,而我只允许代理人角色看到任何内容部分,包括它自己的特定内容类型的代理人内容部分。同样,这些都基于相同的内容类型,因此内容权限将不起作用(一般内容类型除外)。

我想在客户登录时隐藏律师内容部分。

我试过用这个:

public override void Displaying(ShapeDisplayingContext context)
    {
    context.ShapeMetadata.OnDisplaying(displayedContext => {
        var shape = context.Shape;

        if (context.Shape.Part.Name == "Parts_AttorneyMatterPart")
        {
            var workContext = _workContextAccessor.GetContext();
            var user = workContext.CurrentUser;
            var roles = user.As<UserRolesPart>().Roles;

            if (!roles.Contains("Spaces Attorney"))
            {
                shape = null;
            }
        }
        });
    }

我有一个名为 "AttorneyMatterPart" 的内容部分,代理角色是 "Spaces Attorney"。

这些内容类型和部分都是在 Orchard Admin 中创建的。我的模块中唯一的东西就是这个 class 文件。

但这不会在客户端登录时隐藏内容部分。我知道我必须研究哪些角色可以看到东西的逻辑(将为管理员添加 || 条件, ETC。)。现在我只是在测试这个。

感谢任何帮助。

编辑(增加赏金) 我真的不知道这是否可能。此内容部分是通过管理员 UI 创建的。在形状追踪下,我可以在 "Content" 区域模型 > ContentItem > AttorneyMatterPart 下看到。我试过 ShapeTableBuilder 并且我试过 OnDisplayingOnDisplayed 来自 ShapeDisplayingContext.

如果有人可以提供工作示例,我们将不胜感激。

清空 shape 变量只会清除本地引用。但是设置以下应该隐藏形状:

displayedContext.ShapeMetadata.Position = "-";

另外,仅供参考,最好不要检查用户拥有的角色,而是创建自定义权限,将其添加到用户角色,然后通过

检查权限
IAuthorizationService.TryCheckAccess()

当通过管理仪表板创建内容部分时,并没有真正的形状来呈现它,只有内部内容字段的单独形状...

所以,试试这个

public override void Displaying(ShapeDisplayingContext context) {
  context.ShapeMetadata.OnDisplaying(displayedContext => {
    var shape = displayedContext.Shape;

    if (shape.ContentPart != null
      && shape.ContentPart.PartDefinition.Name == "PartName") {
      var workContext = _workContextAccessor.GetContext();
      var user = workContext.CurrentUser;

      if (user == null || !user.Has<UserRolesPart>()
        || !user.As<UserRolesPart>().Roles.Contains("RoleName")) {
        displayedContext.ChildContent = new System.Web.HtmlString("");
      }
    }
  });
}

查看我在 OrchardPros 上的回答

http://orchardpros.net/tickets/6914

最佳