我有一个应用程序,文档创建者可以在其中确定要授予的访问权限。权限的形式为:
- 每个人 => 1
- 我的朋友 => 2
- ME_ONLY => 3
例子:
- 用户 1 创建 doc1 并将权限设置为 EVERYONE
- 用户 2 创建了 doc2 并将权限设置为 ME_ONLY
- 用户 3 创建 doc3 并将权限设置为 MY_FRIENDS
在索引中,我们有 creator_ids 代表创建文档的用户列表。例如对于 doc1:creator_ids=[1]
MY_FRIENDS 列表(针对每个文档创建者)由不同的模块确定,可在运行时访问。
一个文档可以由多个用户创建,每个用户独立授予权限。例如:
- 用户 4 和 5 创建 doc4。用户 4 将权限设置为 EVERYONE,而用户 5 将权限设置为 ME_ONLY。
- 用户 6 和 7 创建 doc5。用户 6 将权限设置为 MY_FRIENDS,而用户 7 将权限设置为 ME_ONLY
对于多个创建者的情况,使用限制较少的权限。例如:
- 对于 doc4,压倒一切的权限将是 EVERYONE
- 对于 doc5,覆盖权限将为 MY_FRIENDS
我检查了几个讨论,找不到适合上述模型的讨论:
- SOLR 权限/根据访问权限过滤结果
- https://issues.apache.org/jira/browse/SOLR-1872
- https://issues.apache.org/jira/browse/SOLR-1834
- http://lucene.472066.n3.nabble.com/Solr-and-Permissions-td2663289.html
- Solr 中的细粒度安全性
为了处理安全性,我考虑了两种方法:
创建一个动态字段(“permissions_*”),为每个文档创建者保留权限。例如:
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.
为每个权限创建一个字段来保存已设置该权限的用户。例如
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.
几个问题:
- 有没有更好的方法来处理这个?
- 这两种方法中的哪一种可以扩展?
提前致谢。