我正在构建内容类型并添加特定于客户和律师的内容部分。所有这些部分都有字段和/或内容选择器等。
我想限制客户端角色仅查看客户端内容部件,而我只是允许律师角色查看任何内容部件,包括它自己的特定内容类型的律师内容部分。同样,这些都在相同的内容类型上,因此内容权限不起作用(通常在内容类型上除外)。
我希望在客户端登录时隐藏律师内容部分。
我尝试过使用它:
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
中的OnDisplayed
和ShapeDisplayingContext
。
如果有人可以提供工作样品,我将不胜感激。
答案 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
最佳