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

Sac*_* R. 3 sitecore sitecore7 sitecore7.2

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

例如,仅对个人资料字段名称为country ='USA'的用户显示/授予对页面A的读取访问权限,就像我们对Sitecore项目中的单个组件所做的那样。

有没有办法在Sitecore中做到这一点?

Ian*_*ham 5

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

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

在此处输入图片说明

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

 public bool EvaluateRule(string fieldName, Item item)
 {
        var ruleContext = new RuleContext();
        foreach (Rule<RuleContext> rule in RuleFactory.GetRules<RuleContext>(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;
    }  
Run Code Online (Sandbox Code Playgroud)

您可以将此代码与此代码组合以拒绝访问该页面

 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();
    }
}
Run Code Online (Sandbox Code Playgroud)