面试题答案
一键面试1. 设置基本读写权限相关概念
在CouchDB中,文档的读写权限主要通过安全对象(_security
)来控制。安全对象是文档的一个特殊属性,它定义了不同角色和用户的访问权限。
2. 关键配置
- 角色(Roles)与用户(Users):
- 角色:可以定义一组具有相同权限的用户,例如“admin”角色、“editor”角色等。在CouchDB中,角色通常在服务器级别或数据库级别进行定义。
- 用户:可以直接指定具体的用户名及其对应的权限。CouchDB支持多种用户认证方式,如基于用户名/密码的认证等。
_security
文档属性:- 对于每个文档,可以通过在文档中添加
_security
属性来设置其权限。例如:
{ "_id": "your_doc_id", "_rev": "your_doc_rev", "_security": { "admins": { "names": [], "roles": ["admin"] }, "readers": { "names": [], "roles": ["admin", "editor"] } }, "other_doc_fields": "..." }
- 在上述示例中:
admins
部分定义了具有管理权限(可完全控制文档,包括删除等操作)的用户和角色。这里names
为空数组,意味着没有直接指定的用户,而roles
数组中包含“admin”角色,表示属于“admin”角色的用户具有管理权限。readers
部分定义了具有读取权限的用户和角色。这里names
为空数组,roles
数组包含“admin”和“editor”角色,表示属于这两个角色的用户具有读取权限。
- 对于每个文档,可以通过在文档中添加
3. API调用参数
- 更新文档权限:
- 使用
PUT
请求更新文档时,将_security
属性包含在请求体中。假设你要更新example_doc
文档的权限,CURL示例如下:
curl -X PUT \ -H "Content-Type: application/json" \ -u your_username:your_password \ -d '{ "_id": "example_doc", "_rev": "your_current_rev", "_security": { "admins": { "names": [], "roles": ["admin"] }, "readers": { "names": [], "roles": ["admin", "editor"] } }, "other_doc_fields": "..." }' \ http://your_couchdb_server:5984/your_database/example_doc
- 关键参数说明:
-u your_username:your_password
:用于认证,确保你有足够权限进行文档更新操作。_rev
:必须提供当前文档的修订版本号,以确保更新的是最新版本,避免冲突。_security
:在请求体中设置的文档安全属性,定义了新的读写权限。
- 使用
通过以上配置和API调用,就可以为CouchDB文档设置特定用户或用户组的基本读写权限,从而控制文档的更新操作。