使用solr中文档创建者确定的权限

时间:2013-08-08 11:20:29

标签: solr solrj solr4

我有一个应用程序,文档创建者确定要提供的访问权限。权限的格式为:

  1. EVERYONE => 1
  2. MY_FRIENDS => 2
  3. ME_ONLY => 3
  4. 示例:

    1. 用户1创建doc1并为EVERYONE设置权限
    2. 用户2创建了doc2并设置了ME_ONLY
    3. 的权限
    4. 用户3创建doc3并设置MY_FRIENDS
    5. 的权限

      在索引中,我们有creator_ids表示创建文档的用户列表。例如对于doc1: creator_ids = [1]

      MY_FRIENDS列表(对于每个文档创建者)由不同的模块决定,可在运行时访问。

      文档可以由多个用户创建,每个用户都可以独立授予权限。 e.g:

      1. 用户4& 5创建doc4。当用户5设置ME_ONLY权限时,用户4将权限设置为每个人。
      2. 用户6& 7创建doc5。用户6设置对MY_FRIENDS的权限,而用户7设置允许ME_ONLY
      3. 对于多个创建者的情况,使用限制较少的权限。 e.g:

        1. 对于doc4,最重要的许可将是EVERYONE
        2. 对于doc5,最重要的许可将是MY_FRIENDS
        3. 我已经检查了几个讨论,找不到符合上述模型的讨论:

          1. SOLR Permissions / Filtering Results depending on Access Rights
          2. https://issues.apache.org/jira/browse/SOLR-1872
          3. https://issues.apache.org/jira/browse/SOLR-1834
          4. http://lucene.472066.n3.nabble.com/Solr-and-Permissions-td2663289.html
          5. Fine grained security in Solr
          6. 为了处理安全问题,我考虑了两种方法:

            1. 创建一个动态字段(“permissions_ *”),其中包含每个文档创建者的权限。 e.g:

              a) For doc1 permissions_1=1
              b) For doc4 permissions_4=1 & permissions_5=3
              
              Then a created a runtime method that checks each document permission (s) and decides if user trying to access is allowed.
              
            2. 对于每个权限,创建一个包含已设置该权限的用户的字段。 e.g。

              a) For doc2 permission_1=[4], permission_2=[] & permission_3=[5]
              b) For doc5 permission_1=[], permission_2=[6] & permission_3=[7]
              
              Then use solr fq query to filter out documents based on permissions. However, I am not an expert in solr, so I still trying to find out how to create such a query.
              
            3. 几个问题:

              1. 有更好的方法来解决这个问题吗?
              2. 两种方法中哪一种可以扩展?
              3. 提前致谢。

1 个答案:

答案 0 :(得分:0)

首先,您应该将您的权限设置为ACL,以便它包含适当的ACE(例如“允许User_A Friends”和“允许User_B Me_Only”)。您可以选择将此信息与文档一起索引,或者如果权限经常更改并且您不想重新索引,则可以实现外部(自定义)缓存。 您可以实现接收用户(名称,ID,等等)的自定义过滤器,并根据您上面提到的规则评估其权限。如果用户数量和文档数量很大,我建议将其实现为PostFilter。有关详情,请参阅此帖子:http://java.dzone.com/articles/custom-security-filtering-solr