2015-12-21 53 views

回答

0

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

因此,例如,每个不同的国家,你有内部Sitecore的各自的作用和使用来定义权限的项目。

下一步是,如果配置文件字段国被更新,更新分配给用户的角色。

+0

有些国家正号和条件可能并不总是涉及到乡间田野它可能与其他的个人资料未来的领域也是如此。所以这是不可能的 –

4

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

规则条件检查的个人资料栏已经内Sitecore的存在,你只需要创建自己的自定义逻辑来拒绝访问页面

enter image description here

要在网页上的评估规则您可以将一些代码放入流水线处理器以检查适用于每个页面的规则。以下是评估规则的示例。

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; 
    } 

你可以使用此代码结合本否认页面访问

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(); 
    } 
} 
相关问题