【问题标题】:Liferay, Search and Security ModelLiferay,搜索和安全模型
【发布时间】:2012-04-04 09:29:06
【问题描述】:

有没有人有过在 Liferay 上实现需要(中等复杂)安全模型的搜索的经验?您如何处理并非所有从搜索引擎返回的结果都有权查看内容的事实? Liferay 中的内置搜索功能是否已经做到了这一点?如果是,怎么做?

因为在返回后过滤潜在的数千个结果可能会非常昂贵。如果您不通过过滤器传递所有结果,您将不知道您的搜索获得了多少总结果(点击)作为登录用户,您可以“查看”。

【问题讨论】:

    标签: search solr lucene liferay liferay-6


    【解决方案1】:

    我认为它首先从 lucene 中搜索,然后检查用户是否具有查看权限。如果您有权访问源代码,请查看 BaseIndexer.search。我在下面附上小sn-p给你看看它是怎么做的?

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

    【讨论】:

    • 是的,我就是这么想的。这是非常低效的。如果您有数千个相关结果怎么办。在您获得当前用户实际可以看到的相关结果总数之前,他们都需要通过此过滤器。
    • 请注意,分页不是问题,一个人只能进行权限检查,直到一个人需要在一页上显示的结果数量(这听起来很诗意!),但要知道总的相关结果可以是如图所示,所有的结果都需要通过这个检查。我相信这个检查也会触发对数据库的查询,这会使情况变得更糟!一定有别的办法!
    猜你喜欢
    • 2021-01-24
    • 1970-01-01
    • 1970-01-01
    • 2020-04-08
    • 1970-01-01
    • 2021-02-11
    • 2021-08-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多