Cookies 基于cookie值删除或隐藏Sitecore导航项

Cookies 基于cookie值删除或隐藏Sitecore导航项,cookies,sitecore,Cookies,Sitecore,我有一个弹出窗口,询问用户他们来自哪个状态,该状态存储在cookie中。我需要能够根据用户来自的状态隐藏某些导航项。我在Sitecore中为西海岸和东海岸各州设置了一个“导航排除”项,这两个州的东海岸和西海岸都有一个要隐藏的页面树状列表 当我试图找出在何处实现此代码以便用户隐藏这些导航项时,我的问题和困惑就出现了。我没有访问导航渲染的权限。在Sitecore的全局级别实现设置项的最佳实践是什么 我的建议 您可以创建角色(西海岸和东海岸),并使用虚拟用户动态分配这些角色 见: 然后,只需为每个角色

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

当我试图找出在何处实现此代码以便用户隐藏这些导航项时,我的问题和困惑就出现了。我没有访问导航渲染的权限。在Sitecore的全局级别实现设置项的最佳实践是什么

我的建议

您可以创建角色(西海岸和东海岸),并使用虚拟用户动态分配这些角色 见: 然后,只需为每个角色的项目分配正确的权限即可

更新:

我在今天工作的一个项目中也做过类似的事情

第一个-在extranet域下创建一个角色
“extranet\WestCoast”

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

  • 选择用户
    extranet\Anonymous
    ,并中断其继承

  • 选择角色
    extranet\WestCoast
    ,断开继承并授予读取权限

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

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

干杯。

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

如何创建一个规则并在“个性化”下的呈现定义中设置该规则

通过这种方式,您可以简单地勾选要隐藏的表示层中的哪个渲染

该规则可以简单地从cookie中读取,如果为true,则隐藏作为操作的呈现


不确定这是否是您要查找的内容?

那么这些用户难道不能登录到Sitecore吗?我添加了一个更新。我试过了,但是用户没有访问sitecore的权限,因为没有分配给它的角色。这真的很好,我很喜欢,我要测试一下,看看它是否符合要求。谢谢你,我绝对不会想到这种方法。你的导航是如何建立的?是否对导航中应包含的每个项目或指向树中项目的一组项目都进行了检查?导航组件是否在代码中静态绑定?您无权访问呈现是什么意思,因为您不能对其进行任何代码更改?导航是基于内容树中的项的XSLT呈现,我无法对其进行任何代码更改,因为我们的客户机的代码部分会定期由新的软件包更新,我们尽量不更改任何可能被这些软件包覆盖的内容。这就是我所倾向的,由于代码限制,很难找到另一种解决方案。我不喜欢这样,我必须在这里使用黑客,但我想不出任何其他方法。