我正在使用Sitecore 7.2。我想根据用户的情况显示或隐藏某些页面。
例如,仅对个人资料字段名称为country ='USA'的用户显示/授予对页面A的读取访问权限,就像我们对Sitecore项目中的单个组件所做的那样。
有没有办法在Sitecore中做到这一点?
听起来规则引擎可能对您来说是一个不错的选择。您可以将“规则”字段添加到页面模板以驱动逻辑。
检查配置文件字段的规则条件已经存在于Sitecore中,您只需要创建自己的自定义逻辑即可拒绝对该页面的访问
要评估页面上的规则,您可以将一些代码放入管道处理器中,以检查适用于每个页面的规则。这是评估规则的示例。
public bool EvaluateRule(string fieldName, Item item)
{
var ruleContext = new RuleContext();
foreach (Rule rule in RuleFactory.GetRules(new[] { item }, fieldName).Rules)
{
if (rule.Condition != null)
{
var stack = new RuleStack();
rule.Condition.Evaluate(ruleContext, stack);
if (ruleContext.IsAborted)
{
continue;
}
if ((stack.Count != 0) && ((bool)stack.Pop()))
{
return true;
}
}
}
return false;
}
您可以将此代码与此代码组合以拒绝访问该页面
public class RulesProcessor : HttpRequestProcessor
{
public override void Process(HttpRequestArgs args)
{
Assert.ArgumentNotNull((object)args, "args");
if (!UserCanAccess())
{
Sitecore.Context.Item=null;
args.PermissionDenied = true;
}
}
private bool UserCanAccess()
{
EvaluateRulesLogic();
}
}