试图在内容类型上隐藏内容部分

时间:2015-04-02 21:45:58

标签: orchardcms orchardcms-1.8

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

我想限制客户端角色仅查看客户端内容部件,而我只是允许律师角色查看任何内容部件,包括它自己的特定内容类型的律师内容部分。同样,这些都在相同的内容类型上,因此内容权限不起作用(通常在内容类型上除外)。

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

我尝试过使用它:

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”的内容部分,而律师角色是“空间律师”。

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

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

感谢任何帮助。

编辑(Bounty已添加) 我真的很难过这是否可能。此内容部分是通过管理UI创建的。在形状跟踪下,我可以在“内容”区域模型&gt;下看到ContentItem&gt; AttorneyMatterPart。我尝试了ShapeTableBuilder,我尝试了OnDisplaying中的OnDisplayedShapeDisplayingContext

如果有人可以提供工作样品,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

取消shape变量只会清除本地引用。但是,设置以下内容应隐藏形状:

displayedContext.ShapeMetadata.Position = "-";

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

检查权限
IAuthorizationService.TryCheckAccess()

答案 1 :(得分:1)

当通过管理信息中心创建内容部分时,实际上没有形状来呈现它,只有内部内容字段的单独形状......

所以,试试这个

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

最佳