3

我创建了一些非管理员的 Sitecore 用户,并为他们分配了一些角色。当这些用户默认访问 Sitecore 门户时,他们不会显示隐藏项目,他们必须转到查看选项卡并手动配置它。有没有一种方法可以通过对这些用户之间共享的用户角色进行一些配置来配置这些用户默认查看隐藏项目。

4

2 回答 2

7

此信息由从(或如果已加载配置文件)Sitecore.Shell.UserOptions.View.ShowHiddenItems获取此数据的属性检索。UserProfileRegistryCache

用户配置文件信息为每个用户单独存储,并以二进制列保存在数据库中。无法从用户角色中获取此选项。

您仍然可以编写一个脚本,该脚本将遍历您提到的角色中的所有用户,并在这些用户的配置文件中设置值:

public static void SetHiddenItemsValue(User user)
{
    string key = "/Current_User/UserOptions.View.ShowHiddenItems";
    string value = "true";

    if (!(user != null))
        return;
    key = StringUtil.Left(key, 250);
    key = key.Replace("Current_User", user.Name);
    user.Profile[key] = value;
    user.Profile.Save();
    RegistryCache registryCache = CacheManager.GetRegistryCache(Sitecore.Context.Site);
    if (registryCache == null)
        return;
    registryCache.Clear();
}
于 2013-08-30T09:58:34.647 回答
4

Maras 的另一种选择是您可以挂钩security:loggedin事件并设置该值。

您的类需要继承自Sitecore.Pipelines.LoggedIn.LoggedInProcessor 那将需要执行以下操作:

public override void Process(LoggedInArgs args)
{
    var user = Sitecore.Security.Accounts.User.FromName(args.Username, true);
    var key = "/" + args.Username + "/UserOptions.View.ShowHiddenItems";

    // if user needs to be in a specific role only, check that here
    // if (user.IsInRole("yourrolename"))
    if (String.IsNullOrEmpty(user.Profile[key]))
    {
        user.Profile[key] = "true";
        user.Profile.Save();
    }
}
于 2013-08-30T10:07:58.023 回答