SOLR权限配置:如何实现仅指定用户可删除目标Collection?
问题根因
你之前配置的权限规则仅作用在目标Collection的自有路径范围(/solr/<目标Collection>/*),只能管控这些路径下的查询、索引写入等操作。但Collection删除请求实际发送到集群级的/solr/admin/collections通用端点,通过action=DELETE参数指定待删除的集合名称,这类集群级请求完全不在你之前配置的权限规则覆盖范围内,因此UserB不受查询权限规则限制,依然可以执行删除操作。
配置步骤
1. 为Collection删除操作配置专属允许规则
这条规则精准匹配删除目标集合的实际请求,仅允许绑定了my-rule角色的UserA执行操作:
curl -u <<admin_user>>:<<admin_user_password>> -H 'Content-type:application/json' -d '{ "set-permission": { "name": "allow-authorized-user-delete-collection", "role": "my-rule", "path": "/admin/collections", "params": { "action": "DELETE", "name": ["collection", "collection2"] }, "method": "GET,POST" } }' http://<<solr-host>>:<<solr-port>>/solr/admin/authorization
参数说明:
- 权限作用路径对准Collection删除的实际请求端点
/admin/collections,不再局限于单个Collection的自有路径 - 通过
params限定规则触发条件:仅当请求的操作类型为DELETE、且待删除的集合是你要管控的两个目标集合时,规则才会生效 - 直接关联已经分配给UserA的
my-rule角色,仅持有该角色的用户可以匹配到这条允许权限
2. 配置兜底拒绝规则避免权限漏配
Solr默认逻辑为“未匹配到明确允许规则的请求,若无显式拒绝规则可能被默认放行”,因此需要补充一条高优先级的兜底规则,明确禁止所有无my-rule角色的用户执行上述删除操作:
curl -u <<admin_user>>:<<admin_user_password>> -H 'Content-type:application/json' -d '{ "set-permission": { "name": "deny-non-authorized-user-delete-collection", "role": null, "path": "/admin/collections", "params": { "action": "DELETE", "name": ["collection", "collection2"] }, "policy": "deny", "priority": 100 } }' http://<<solr-host>>:<<solr-port>>/solr/admin/authorization
参数说明:
role: null代表规则不关联任何可访问的角色组policy: deny代表未匹配到更高优先级允许规则的请求,直接返回403权限错误priority:100代表规则优先级高于普通允许规则,确保兜底逻辑优先生效
验证方式
- 用UserA账号发送目标Collection的删除请求,可正常通过权限校验完成操作
- 用UserB账号发送相同的删除请求,会返回403权限不足错误,满足“仅UserA可访问、可删除目标Collection”的权限要求
注意:你之前给UserA绑定的build角色如果无实际业务需要,可后续通过remove-user-role接口移除,避免超出业务需求的权限范围
内容的提问来源于stack exchange,提问作者Varun Chadha
相关产品推荐
相关产品推荐

