根据cookie值删除或隐藏Sitecore导航项

时间:2014-07-30 14:45:05

标签: cookies sitecore

我有一个弹出窗口询问用户他们来自哪个州,状态存储在cookie中。我需要能够根据用户来自的状态隐藏某些导航项。我设置了一个"导航排除" Sitecore中西海岸和东海岸各州的项目,每个东西海岸都有一个页面隐藏的页面。

当我试图找出实现此代码的位置以便这些导航项对用户隐藏时,我的疑问和困惑就出现了。我无法访问导航呈现。在Sitecore的全局级别实施设置项的最佳实践是什么?

3 个答案:

答案 0 :(得分:2)

我的建议......

您可以创建角色(西海岸和东海岸)并使用虚拟用户即时分配这些角色 见:http://sdn.sitecore.net/Articles/Security/Faking%20user%20roles/Virtual%20user.aspx 然后,只需为每个角色的项目分配正确的权限。

更新:

我在今天工作的项目上做了类似的事情。

1st - 在Extranet域"extranet\WestCoast"

下创建一个角色

第2步 - 创建安全预设,转到分配安全性并执行以下操作

  • 选择用户extranet\Anonymous并中断其继承
  • 选择角色extranet\WestCoast,中断继承并授予读取权限。

    enter image description here

第3步 - 选择要保护的项目,然后在安全功能区上使用预设“添加西海岸角色”,保存并检查安全性 - >详细信息(如果已应用设置)。

4rd - 使用此方法创建并登录虚拟用户。您可以在布局负载中调用它,根据cookie值传递角色。

public static void CreateVirtualUser(string username, params string[] roles)
{
    var virtualUser = Sitecore.Security.Authentication.AuthenticationManager.BuildVirtualUser(username, true);

    //clear roles - not sure if really needed
    virtualUser.RuntimeSettings.AddedRoles.Clear();
    virtualUser.Roles.RemoveAll();

    //add the extranet roles
    foreach (var role in roles)
    {
        string domainRole = string.Format("extranet\\{0}", role);
        if (Sitecore.Security.Accounts.Role.Exists(domainRole))
        {
            virtualUser.RuntimeSettings.AddedRoles.Add(domainRole);
        }
    }
    Sitecore.Security.Authentication.AuthenticationManager.Login(virtualUser);
}

干杯。

答案 1 :(得分:1)

如果您无法访问导航组件的代码,我唯一能想到的就是创建一个新组件来执行一些客户端代码(js),从而删除HTML您导航排除"中的项目的导航组件项目。它是一个黑客,但它应该工作,直到你找到一个更好的方法。

答案 2 :(得分:0)

如何在个性化下创建规则并在渲染的表示定义中设置该规则?

这样,您只需勾选表示层中的哪个渲染即可隐藏。

规则可以简单地从cookie中读取并隐藏渲染作为操作(如果它是真的)。

不确定这是否是您要找的?