zkCli.sh如何设置
自带的命令行客户端设置比较简单
- 增加授权用户。addauth digest root:111
其中digest是scheme,root:111是id (credential,root可以理解为明文用户,111可以理解为明文密码) :perm
2.为特定目录设置权限。 setAcl /1 auth:root:cdwra
为 /1 目录添加权限,目录可以任意指定,只对当前目录起作用。比如当前目录为 /1, 所以根目录/没有鉴权验证。root可以理解为明文用户,cdwra含义为缩写。
c 可以创建子节点, d 可以删除子节点(仅下一级节点), r 可以读取节点数据及显示子节点列表,w 可以设置节点数据, a 可以设置节点访问控制列表权限
- 为目录设置权限后,重新连接访问,则需要针对会话添加授权用户
addauth digest root:111
C API client如何设置
- 增加授权用户
cppint zoo_add_auth(zhandle_t *zh,const char* scheme,const char* cert,int certLen, void_completion_t completion, const void *data);
scheme填写digest
cert填写root:111
certLen填写cert字符串长度
completion回调函数
该函数执行成功后,即可访问需要鉴权验证的目录
- 为特定目录设置权限
cppint zoo_set_acl(zhandle_t *zh, const char *path, int version, const struct ACL_vector *acl)
path填写需要设置权限的路径
version填写-1,表示忽略校验版本号
acl 鉴权数据结构体
用法如下:
cppauto acl_item = new ACL{}; acl_item->id.scheme = (char*)"digest"; acl_item->id.id = (char*)"root:wEu/CPgrVI/4mg2A1AKUtstW6AI="; // 明文用户名:base64密码,明文密码是111 acl_item->perms = ZOO_PERM_ALL; // 所有权限,即cdwra struct ACL_vector acl{}; acl.count = 1; // ACL 规则的数量 acl.data = acl_item; auto rc = zoo_set_acl(zh_, "/1", -1, &acl);