Sitecore:如何根据条件显示或隐藏某些页面?

Sitecore:如何根据条件显示或隐藏某些页面?,sitecore,sitecore7,sitecore7.2,Sitecore,Sitecore7,Sitecore7.2,我正在使用Sitecore 7.2。我想根据用户的条件显示或隐藏某些页面 例如,仅向其配置文件字段名称country='USA'的用户显示/授予对页面A的读取权限,就像我们对Sitecore项目中的单个组件所做的那样 在Sitecore中有这样做的方法吗 为什么不使用Sitecore支持的基于角色的权限 例如,对于每个不同的国家,您在Sitecore中都有各自的角色,并使用这些角色定义对项目的权限 下一步是更新配置文件字段“国家/地区”时更新分配给用户的角色。这听起来规则引擎可能是一个不错的选择

我正在使用Sitecore 7.2。我想根据用户的条件显示或隐藏某些页面

例如,仅向其配置文件字段名称country='USA'的用户显示/授予对页面A的读取权限,就像我们对Sitecore项目中的单个组件所做的那样


在Sitecore中有这样做的方法吗

为什么不使用Sitecore支持的基于角色的权限

例如,对于每个不同的国家,您在Sitecore中都有各自的角色,并使用这些角色定义对项目的权限


下一步是更新配置文件字段“国家/地区”时更新分配给用户的角色。

这听起来规则引擎可能是一个不错的选择。您可以向页面模板添加规则字段来驱动逻辑

检查配置文件字段的规则条件已经存在于Sitecore中,您只需要创建自己的自定义逻辑来拒绝对页面的访问

要评估页面上的规则,可以将一些代码放入管道处理器中,以检查适用于每个页面的规则。下面是一个评估规则的示例

public bool EvaluateRule(字符串字段名,项)
{
var ruleContext=新的ruleContext();
foreach(RuleFactory.GetRules中的规则(新[]{item},fieldName).Rules)
{
if(rule.Condition!=null)
{
var stack=新规则栈();
rule.Condition.Evaluate(ruleContext,stack);
if(ruleContext.isborted)
{
继续;
}
如果((stack.Count!=0)&((bool)stack.Pop())
{
返回true;
}
}
}
返回false;
}  
您可以将此代码与此代码结合使用,以拒绝对页面的访问

公共类规则处理器:HttpRequestProcessor
{
公共覆盖无效进程(HttpRequestArgs args)
{
Assert.ArgumentNotNull((object)args,“args”);
如果(!UserCanAccess())
{
Sitecore.Context.Item=null;
args.PermissionDenied=true;
}
}
私有bool UserCanAccess()
{
EvaluateRulesLogic();
}
}

有n个国家/地区,条件可能并不总是与国家/地区字段相关,将来也可能与其他配置文件字段相关。所以这是不可能的