사용자 정의 웹 파트에 표시되는 사용자 정의 제품 유형이 있습니다. 성능상의 이유로 항목을 캐시하려고했지만 모든 사용자가 모든 제품을 볼 수있는 것은 아니므로 사용자 권한을 확인하는 것도 중요합니다.캐싱 및 사용 권한 확인을 포함하여 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의 일부로 보이는 것입니다. 그러나 캐시 된 제품 목록 또는 개별 노드에 적용하는 방법을 모르겠습니다.
그래서 내가 원하는 것을 얻을 수있는 좋은 방법이 있습니까? 각 노드를 반복하지 않고 개별적으로 사용자가 노드에 액세스 할 수 있는지 확인하십시오.
제품 목록을 캐시 할 수 있는지 궁금한데, 그 다음에 쉽게/효율적으로 표시하기 전에 사용 권한을 확인하십시오. 나는 사용자 당 캐싱을 피하려고 노력하고있다. 또한 사용자 집합의 필터링 된 제품 목록을 볼 필요가있는 경우 캐싱을 사용할 수없는 것처럼 보일 수도 있습니다. 희망은 더 이해가됩니다. – Jen
나는 실제로 캐시에서 코드의 일부를 제 질문에 추가했습니다 - 제안에 감사드립니다. – Jen
캐시 키의 일부로 사용자 식별자를 포함하고 사용자 당 캐싱을 마무리했습니다. Kentico는 제품이 캐시 된 경우에도 권한을 확인하기 위해 어쨌든 데이터베이스를 때릴 것이라고 지적했습니다. – Jen