试图隐藏内容类型的内容部分
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
并且我试过 OnDisplaying
和 OnDisplayed
来自 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
最佳
我正在构建内容类型并添加特定于客户和代理人的内容部分。所有这些部分都有字段 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
并且我试过 OnDisplaying
和 OnDisplayed
来自 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
最佳