【问题标题】:How can I set up a Lucene index in Sitecore that handles security correctly?如何在 Sitecore 中设置正确处理安全性的 Lucene 索引?
【发布时间】:2010-11-05 18:11:40
【问题描述】:

我在 Sitecore 担任多个不同的角色。而且我已经对我的内容项设置了安全权限,以便不同的角色只能访问某些内容项。似乎 Lucene 只会索引所有内容。当我查询 Lucene 时,它​​并没有注意安全性。有没有办法让 Lucene 只返回当前 Extranet 用户有权访问的项目?

谢谢, 科里

【问题讨论】:

    标签: security lucene sitecore


    【解决方案1】:

    据我所知。但是在处理 Hits 集合时,您通常会遇到类似这样的循环:

    for ( int i = 0; i < hits.Length() && i < Context.Current.Settings.MaxSearchResultsToProcess; i++ )
    {
        Item item = Index.GetItem( hits.Doc( i ), Context.Current.Database );
        if ( item != null )
        {
            indexResultater.Add( item );
        }
    }
    

    并且由于这在您当前用户的上下文中运行,因此如果用户无法访问它们,则不会将结果添加到您的结果中。

    【讨论】:

    • 实际上在我的代码中我做的有点不同。我没有遍历数千个结果,而是仅遍历当前页面的项目。因此,如果我的搜索返回了 1,475 次点击,并且我在结果集的第 2 页,那么我只会获得 11-20 次点击。但是我想我可以按照您建议的方式尝试一下。这只是意味着我必须始终遍历所有 1,475 个点击,然后只获取我可以访问的那些。然后,我可以退回项目 11-20。希望不会太慢。
    • 实际上,它通常不会太糟糕。您可以考虑的几件事是,从搜索中返回的结果不会超过 YYY。 1475 是我认为太多了,我通常从不要求 Lucene 为任何给定的查询处理超过 200-300 个点击。 Sitecore 的 Item 缓存会(很多)帮助您处理后续页面请求,最后您可以选择缓存结果以供页面浏览。
    猜你喜欢
    • 1970-01-01
    • 2021-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多