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 回答