2017-12-18 22 views
0

사용자 정의 웹 파트에 표시되는 사용자 정의 제품 유형이 있습니다. 성능상의 이유로 항목을 캐시하려고했지만 모든 사용자가 모든 제품을 볼 수있는 것은 아니므로 사용자 권한을 확인하는 것도 중요합니다.캐싱 및 사용 권한 확인을 포함하여 Kentico 10 웹 노드로드에 가장 적합한 방법

private static IList<TreeNode> GetUniqueProducts(string clientId, string path) 
{ 
     var pages = CacheHelper.Cache(cs => GetProducts(cs, path), new CacheSettings(10, "cus|" + clientId)); 
     return GetUniqueProductNamesItems(pages); 
} 

private static IList<TreeNode> GetProducts(CacheSettings cacheSettings, string rootPath) 
{ 
    var pages = DocumentHelper.GetDocuments().Types("CUS.Product") 
       .Path(rootPath, PathTypeEnum.Children) 
       .Published().CheckPermissions().ToList(); 

    if (cacheSettings.Cached) 
    { 
      cacheSettings.CacheDependency = CacheHelper.GetCacheDependency("nodes|custom|cus.product|all"); 
    } 

    return pages; 
} 

그러나 나는 이것이 첫 번째 사용자의 제품 목록을 캐싱하고 있음을 알고 있습니다. 실제로 캐시의 전체 제품 목록을 저장하려고하지만 표시되기 전에 사용 권한을 확인하십시오.

권한을 확인하는 유일한 방법은 위와 같이 DocumentQuery의 일부로 보이는 것입니다. 그러나 캐시 된 제품 목록 또는 개별 노드에 적용하는 방법을 모르겠습니다.

그래서 내가 원하는 것을 얻을 수있는 좋은 방법이 있습니까? 각 노드를 반복하지 않고 개별적으로 사용자가 노드에 액세스 할 수 있는지 확인하십시오.

답변

1

코드에 캐싱 부분이 누락되어 있으며 캐시 종속성에 대해 확신하지 못합니다.

var pages = CacheHelper.Cache(cs => 
    { 
     var result = CMS.DocumentEngine.DocumentHelper.GetDocuments().Types("CUS.Product").Path(rooPath, CMS.DocumentEngine.PathTypeEnum.Children).Published().ToList(); 
     if (cs.Cached) { cs.CacheDependency = CacheHelper.GetCacheDependency("cus.product|all"); } 
     return result; 
    }, 
    new CacheSettings(CacheHelper.CacheMinutes(CurrentSite.SiteName), "custom_products")); 

사용자 읽기 권한을 확인하는 경우 사용자 당 다소 캐싱된다는 의미입니다. 그런 다음 캐시는 사용자별로 수행되어야합니다. 즉, cachename은 "custom_products"+ UserID.ToString() 또는 이와 비슷한 형식이어야합니다.

+0

제품 목록을 캐시 할 수 있는지 궁금한데, 그 다음에 쉽게/효율적으로 표시하기 전에 사용 권한을 확인하십시오. 나는 사용자 당 캐싱을 피하려고 노력하고있다. 또한 사용자 집합의 필터링 된 제품 목록을 볼 필요가있는 경우 캐싱을 사용할 수없는 것처럼 보일 수도 있습니다. 희망은 더 이해가됩니다. – Jen

+0

나는 실제로 캐시에서 코드의 일부를 제 질문에 추가했습니다 - 제안에 감사드립니다. – Jen

+0

캐시 키의 일부로 사용자 식별자를 포함하고 사용자 당 캐싱을 마무리했습니다. Kentico는 제품이 캐시 된 경우에도 권한을 확인하기 위해 어쨌든 데이터베이스를 때릴 것이라고 지적했습니다. – Jen