Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/solr/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在solr中使用文档创建者确定的权限_Solr_Solrj_Solr4 - Fatal编程技术网

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

在solr中使用文档创建者确定的权限,solr,solrj,solr4,Solr,Solrj,Solr4,我有一个应用程序,文档创建者可以在其中确定要授予的访问权限。权限的格式如下: 每个人=>1 我的朋友=>2 仅限ME_=>3 例如: 用户1创建doc1并为每个人设置权限 用户2创建了doc2并仅将权限设置为ME_ 用户3创建doc3并为我的朋友设置权限 在索引中,我们有creator_id,表示创建文档的用户列表。e、 g.对于doc1: 创建者_id=[1] 我的朋友列表(针对每个文档创建者)由不同的模块确定,可在运行时访问 一个文档可以由多个用户创建,每个用户独立授予权限。e、 g: 用户

我有一个应用程序,文档创建者可以在其中确定要授予的访问权限。权限的格式如下:

  • 每个人=>1
  • 我的朋友=>2
  • 仅限ME_=>3
  • 例如:

  • 用户1创建doc1并为每个人设置权限
  • 用户2创建了doc2并仅将权限设置为ME_
  • 用户3创建doc3并为我的朋友设置权限
  • 在索引中,我们有creator_id,表示创建文档的用户列表。e、 g.对于doc1: 创建者_id=[1]

    我的朋友列表(针对每个文档创建者)由不同的模块确定,可在运行时访问

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

  • 用户4和5创建doc4。用户4将权限设置为EVERYONE,而用户5仅将权限设置为ME_
  • 用户6和7创建文档5。用户6为我的朋友设置权限,而用户7仅为我设置权限
  • 对于多个创建者的情况,使用限制较少的权限。e、 g:

  • 对于doc4,覆盖权限将为EVERYONE
  • 对于doc5,最重要的权限将是MY_FRIENDS
  • 我检查了几次讨论,没有找到符合上述模型的讨论:

  • 为了处理安全问题,我想到了两种方法:

  • 创建一个动态字段(“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.
    
  • 为每个权限创建一个字段,其中包含已设置该权限的用户。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.
    
  • 有几个问题:

  • 有没有更好的处理方法
  • 这两种方法中哪一种可以扩展

  • 提前感谢。

    首先,您应该将权限集建模为ACL,以便它包含正确的ACE(如“允许用户成为朋友”和“仅允许用户使用我”)。如果权限经常更改并且您不想重新编制索引,则可以选择将此信息与文档一起编制索引,或者实现外部(自定义)缓存。 您可以实现一个自定义筛选器,该筛选器接收用户(名称、id等),并根据上面提到的规则评估其权限。如果用户数量和文档数量很大,我建议将其实现为PostFilter。有关更多信息,请参阅本文: