【问题标题】:Lucene indexing with restricted user access具有受限用户访问权限的 Lucene 索引
【发布时间】:2016-11-01 18:14:52
【问题描述】:

我们正在尝试分别使用 lucene solr 将全文搜索功能添加到我们的自定义知识库中。我们目前限制用户使用基于角色的模型可以看到的内容。因此,每篇文章都有一系列角色,如果用户也是其中一个角色的成员,他/她可以查看文章。

当然,搜索应该只返回用户有权访问的结果。

我有点不知道从哪里开始或如何做到这一点。我需要稍后过滤结果吗?我是否创建基于角色的索引?

如果有人能指出我正确的方向,我们将不胜感激。

谢谢。斯蒂芬妮。

【问题讨论】:

    标签: solr lucene full-text-search search-engine searchview


    【解决方案1】:

    我建议将访问角色存储为元数据。让定义access_roles 能够多值字符串字段。

    access_roles:[user, admin] // Users and the Admin roles can access this search.
    access_roles:[user, admin, anonymous] // Users and the Admin and Anonymous roles can access this search.
    

    当您想要更改权限时,您应该编辑访问角色。


    当有用户角色的用户搜索时,solr 将只检索与用户的访问角色匹配的结果。

    当具有 (user) 角色和 (admin) 角色的用户搜索时,他的搜索结果如下:

    q=mainquery
    &fq=access_roles:user
    &fq=access_roles:admin
    &facet=on
    &facet.field=access_roles
    

    获取所有包含user角色的结果ORadminaccess_roles中的角色;

    当用户 (user) 角色、特殊团队成员 (it_department) 角色搜索时,

    q=mainquery
    &fq=access_roles:user
    &fq=access_roles:it_department
    &facet=on
    &facet.field=access_roles
    

    它还获取“it_department”文档

    我已经画了授权方案以便更好地理解

    查询改编自http://wiki.apache.org/solr/SimpleFacetParameters#Multi-Select_Faceting_and_LocalParams

    【讨论】:

    • 你好。感谢您的回复。不过有两个问题。首先,仅根据查询限制结果会不会有点危险?据我了解,此查询可以由用户操纵。第二件事是,我们已经将访问方法实现为接口,因此其他实现使用不同的功能/方法。正如我刚刚被告知的那样,我们有一个组织例如使用上行地址来限制访问。所以基本上 access_method 需要在每个用户会话中实时返回 true。谢谢。斯蒂芬妮
    • 我认为您的 solr 查询不能直接从最后的用户访问。我认为您正在使用 Web 框架。我认为您应该使用 lucene 查询解析器从 Web 项目中的用户那里获取查询,例如 Spring。比你应该定义一些常量来实现 access_roles 常量能够区分所有访问组。即你不能直接使用布尔值。您应该定义特定于用户组的指标。如果访问方法为真,则应添加 access_role 以拦截用户可访问的控制器方法进行查询。 Solr 没有任何授权框架
    • 框架,这就是为什么你应该使用类似 Spring 的 web 框架。因为搜索授权。如果用户无法直接访问 solr 服务器,并且您使用 Web 框架管理 solr,我认为您将解决您的问题并确保搜索安全。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-11
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 2018-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多