面试题答案
一键面试关键配置
- 用户认证与角色设置:
- 使用CouchDB的内置用户认证机制。可以通过
_users
数据库来管理用户。在创建用户时,为普通用户分配normal_user
角色,为管理员用户分配admin_user
角色。例如,创建用户的HTTP请求(假设使用curl
):
curl -X PUT -H "Content-Type: application/json" -d '{"name": "normal_user1", "password": "password1", "roles": ["normal_user"], "type": "user"}' http://localhost:5984/_users/org.couchdb.user:normal_user1 curl -X PUT -H "Content-Type: application/json" -d '{"name": "admin_user1", "password": "password2", "roles": ["admin_user"], "type": "user"}' http://localhost:5984/_users/org.couchdb.user:admin_user1
- 使用CouchDB的内置用户认证机制。可以通过
- 文档设计:
- 在文档中添加一个字段,比如
created_by
,用于记录创建文档的用户。当普通用户创建文档时,将自己的用户名写入这个字段。例如,一个普通用户创建文档的请求:
curl -X POST -H "Content-Type: application/json" -d '{"title": "My Document", "created_by": "normal_user1"}' -u normal_user1:password1 http://localhost:5984/my_database
- 在文档中添加一个字段,比如
- 视图设计:
- 创建一个视图,用于根据
created_by
字段进行查询。在设计文档中定义视图,例如:
{ "_id": "_design/my_design", "views": { "by_created_by": { "map": "function(doc) { if (doc.created_by) { emit(doc.created_by, doc); } }" } } }
- 使用
curl
上传设计文档:
curl -X PUT -H "Content-Type: application/json" -d @design_doc.json -u admin_user1:password2 http://localhost:5984/my_database/_design/my_design
- 创建一个视图,用于根据
API操作步骤
- 普通用户查询:
- 普通用户只能查询自己创建的文档。利用上述创建的视图,普通用户发起如下查询请求:
curl -u normal_user1:password1 http://localhost:5984/my_database/_design/my_design/_view/by_created_by?key="normal_user1"
- 这里通过
key
参数指定只返回created_by
字段值为当前普通用户名的文档。
- 管理员用户查询:
- 管理员用户可以查询所有文档。管理员用户可直接查询视图,不指定
key
参数:
curl -u admin_user1:password2 http://localhost:5984/my_database/_design/my_design/_view/by_created_by
- 这样就会返回数据库中所有文档,因为视图会根据
created_by
字段索引所有文档,管理员不受特定key
值限制。
- 管理员用户可以查询所有文档。管理员用户可直接查询视图,不指定