面试题答案
一键面试在CouchDB中,使用HTTP API删除文档时保障权限的基本机制及关键配置/操作如下:
基本机制
- 基于用户角色和权限:CouchDB使用基于角色的访问控制(RBAC)。不同角色(如管理员、普通用户等)被赋予不同的权限。例如,管理员角色通常具有更高的权限,包括删除文档的权限,而普通用户可能只有读取权限,或者需要额外的授权才能删除文档。
- 文档级权限:除了角色权限,CouchDB还支持文档级别的权限设置。这意味着可以针对特定文档设置谁有权限删除它。通过在文档的元数据中定义权限信息,只有被授权的用户或角色才能删除该文档。
关键配置或操作
- 用户认证:
- 用户名和密码认证:在CouchDB的配置文件(通常是
local.ini
)中,可以配置使用用户名和密码进行认证。例如,启用httpd_auth
模块,并配置[httpd]
部分的WWW-Authenticate
头信息,告知客户端如何进行认证。 - 基于令牌的认证:也可以使用基于令牌的认证方式,如JSON Web Tokens(JWT)。用户在请求中携带有效的令牌,CouchDB验证令牌的有效性来确认用户身份和权限。
- 用户名和密码认证:在CouchDB的配置文件(通常是
- 数据库权限配置:
- 在数据库的
_security
文档中,可以定义不同角色对数据库的操作权限。例如,以下是一个简单的_security
文档示例:
- 在数据库的
{
"admins": {
"names": [],
"roles": ["admin"]
},
"members": {
"names": [],
"roles": ["reader", "writer"]
}
}
在这个示例中,具有admin
角色的用户拥有管理员权限,包括删除文档;具有writer
角色的用户可能有删除文档的权限(具体取决于进一步配置),而reader
角色用户可能只有读取权限。
3. 文档级权限设置:
- 在文档中,可以添加自定义的权限字段。例如:
{
"_id": "example_doc",
"data": "some data",
"permissions": {
"delete": ["user1", "role1"]
}
}
这样只有user1
用户和具有role1
角色的用户才能删除该文档。当接收到删除文档的HTTP请求时,CouchDB会检查请求用户是否在允许删除的列表中。