我有一个弹出窗口询问用户他们来自哪个州,状态存储在cookie中。我需要能够根据用户来自的状态隐藏某些导航项。我设置了一个"导航排除" Sitecore中西海岸和东海岸各州的项目,每个东西海岸都有一个页面隐藏的页面。
当我试图找出实现此代码的位置以便这些导航项对用户隐藏时,我的疑问和困惑就出现了。我无法访问导航呈现。在Sitecore的全局级别实施设置项的最佳实践是什么?
答案 0 :(得分:2)
我的建议......
您可以创建角色(西海岸和东海岸)并使用虚拟用户即时分配这些角色 见:http://sdn.sitecore.net/Articles/Security/Faking%20user%20roles/Virtual%20user.aspx 然后,只需为每个角色的项目分配正确的权限。
更新:
我在今天工作的项目上做了类似的事情。
1st - 在Extranet域"extranet\WestCoast"
第2步 - 创建安全预设,转到分配安全性并执行以下操作
extranet\Anonymous
并中断其继承选择角色extranet\WestCoast
,中断继承并授予读取权限。
第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中读取并隐藏渲染作为操作(如果它是真的)。
不确定这是否是您要找的?