Solr基本身份验证权限设置

时间:2018-12-03 21:09:51

标签: solr basic-authentication solrj solrcloud user-roles

我的目标是只有用户A可以读取集合1,只有用户B可以读取集合2。我认为,通过在预定义的“读取”之前添加集合属性可能会有所帮助,但事实并非如此。我已经测试了很多方法,但是没有用。我在here中看到了示例,但是没有用。 现在我有:

Markdown and HTML are turned off in code blocks:
<i>This is not italic</i>, and [this is not a link](https://example.com)
{"authentication":{
"blockUnknown":true,
"class":"solr.BasicAuthPlugin",
"credentials":{...},
"":{"v":0}},
  "authorization":{
    "class":"solr.RuleBasedAuthorizationPlugin",
    "permissions":[
      {
        "name":"security-edit",
        "role":"admin",
        "index":1},
      {
        "name":"permission1",
        "collection":"collection1",
        "path":"/select",
        "role":"readColletion1",
        "index":2}],
"user-role":{
  "solr":"admin",
  "userA":"readColletion1",
  "userB":"readColletion2",},
"":{"v":0}}}

用户B仍然无缘无故访问collection1时。

以前有人做过吗?希望我能得到一些提示,谢谢! 我被困了一整天……迫切需要帮助

1 个答案:

答案 0 :(得分:0)

几天来,我一直遇到同样的问题,并且找到了解决方案。

我有2位用户luigi和mario是我的客户,这些客户被允许使用我的solr实例,并且每个人都有自己的收藏集。他们不应该能够以任何方式查看或使用不属于他们的任何收藏。

但是,他们每个人都可以完全访问自己的收藏集。

这是我对solr 8.1.1的解决方案

"authorization": {
"class": "solr.RuleBasedAuthorizationPlugin",
"permissions": [
  {
    "collection": null,
    "params": {
      "action": [
        "LIST",
        "CREATE"
      ]
    },
    "role": "admin",
    "index": 1
  },
  {
    "collection": "mario",
    "path": [
      "/*"
    ],
    "method": [
      "GET",
      "PUT",
      "POST",
      "DELETE",
      "HEAD"
    ],
    "role": "mario",
    "index": 2
  },
  {
    "collection": "luigi",
    "path": [
      "/*"
    ],
    "method": [
      "GET",
      "PUT",
      "POST",
      "DELETE",
      "HEAD"
    ],
    "role": "luigi",
    "index": 3
  }
],
"user-role": {
  "solr": "admin",
  "mario": "mario",
  "luigi": "luigi"
},
"": {
  "v": 17
}
}

您必须为系统中的每个角色定义权限,否则,具有未定义权限的角色可以做任何事情。您还必须为要保护的每个动作定义一个权限,否则任何角色都可以执行该动作。

示例:需要index 1权限才能禁止mario和luigi列出或创建收藏集。但是,最好使用collection_admin_edit和collection_admin_read的预定义权限。因为仅通过定义索引1处的LIST和CREATE动作,仍然允许luigi和mario执行所有其他动作。在此示例中,我仍然能够使用上述权限集以用户luigi的身份删除收藏集mario。

在这种情况下,我应该注意,solr documentation提到将限制性最强的权限放入索引1。因为每个请求的权限都是按照从上到下的顺序进行查询的。

我希望这可以帮助遇到同样问题的任何人。