4

(適度に複雑な) セキュリティ モデルを必要とする Liferay で検索を実装した経験のある人はいますか? 検索エンジンから返されるすべての結果にコンテンツを表示する権限があるわけではないという事実にどのように対処しますか? Liferay の組み込み検索はすでにこれを行っていますか? はいの場合、どのように?

何千もの結果が返された後にそれらをフィルタリングすると、非常にコストがかかる可能性があるためです。また、すべての結果をフィルターに通さないと、ログインしたユーザーとして「見る」ことができる検索結果 (ヒット数) の合計数がわかりません。

4

1 に答える 1

1

最初に lucene から検索し、ユーザーがそれに対する表示権限を持っているかどうかを確認すると思います。ソース コードにアクセスできるかどうかを確認するには、BaseIndexer.search を参照してください。以下に小さなスニペットを添付して、それがどのように機能するかを示しますか?

PermissionChecker permissionChecker =
                PermissionThreadLocal.getPermissionChecker();

int start = searchContext.getStart();
int end = searchContext.getEnd();

if (isFilterSearch() && (permissionChecker != null)) {
    searchContext.setStart(0);
    searchContext.setEnd(end + INDEX_FILTER_SEARCH_LIMIT);
}

Hits hits = SearchEngineUtil.search(searchContext, fullQuery);

searchContext.setStart(start);
searchContext.setEnd(end);

if (isFilterSearch() && (permissionChecker != null)) {
    hits = filterSearch(hits, permissionChecker, searchContext);
}
于 2012-04-04T10:06:13.197 に答える