2013-08-30 54 views
3

我創建了一些不是管理員的Sitecore用戶,併爲他們分配了幾個角色。當這些用戶默認訪問Sitecore門戶時,他們不會顯示隱藏項目,他們必須去查看選項卡並手動配置它。有沒有辦法通過對這些用戶之間共享的用戶角色進行一些配置來默認配置這些用戶來查看隱藏項目。Sitecore非管理員用戶顯示隱藏項目

回答

7

這個信息被Sitecore.Shell.UserOptions.View.ShowHiddenItems檢索到,它從UserProfile(或者如果配置文件已經被加載從RegistryCache)獲得這個數據。

用戶配置文件信息爲每個用戶單獨存儲並以二進制列的形式保存在數據庫中。沒有辦法從用戶角色獲取此選項。

你仍然可以寫會遍歷該角色的所有用戶,你提到的是一個腳本,並在這些用戶的配置文件中設置的值:

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

從馬拉什另一種選擇是你可能鉤到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(); 
    } 
} 
+1

同意。這也是一個選項。您的解決方案的好處是,它將適用於分配給此角色的新用戶。缺點是它會在所有用戶的每次登錄操作後執行。無論如何+1 –