1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
|
func auth() {
cli, _ := clientv3.New(clientv3.Config{
// etcd 集群的地址集合
Endpoints: []string{"192.168.10.10:2379"},
// 请求超时时间
DialTimeout: time.Second * 3,
})
defer cli.Close()
ctx, cancel := context.WithCancel(context.Background())
defer cancel()
auth := clientv3.NewAuth(cli)
// create role
if _, err := auth.RoleAdd(ctx, "root"); err != nil {
log.Fatal(err)
}
// create role
if _, err := auth.UserAdd(ctx, "root", "123"); err != nil {
log.Fatal(err)
}
// grant role root to user root
if _, err := auth.UserGrantRole(ctx, "root", "root"); err != nil {
log.Fatal(err)
}
if _, err := auth.UserChangePassword(ctx, "root", "123"); err != nil {
log.Fatal(err)
}
if _, err := auth.RoleAdd(ctx, "guest"); err != nil {
log.Fatal(err)
}
if _, err := auth.UserAdd(ctx, "xingyys", ""); err != nil {
log.Fatal(err)
}
if _, err := auth.UserGrantRole(ctx, "xingyys", "guest"); err != nil {
log.Fatal(err)
}
// 不知道为什么,需要在grant后更新密码
// 否则密码无效
if _, err := auth.UserChangePassword(ctx, "xingyys", "123"); err != nil {
log.Fatal(err)
}
// 添加指定key的访问权限
// read, write, readwrite
if _, err := auth.RoleGrantPermission(ctx,
"guest",
"foo",
"zoo",
clientv3.PermissionType(clientv3.PermReadWrite)); err != nil {
log.Fatal(err)
}
if _, err := auth.AuthEnable(ctx); err != nil {
log.Fatal(err)
}
authCli, _ := clientv3.New(clientv3.Config{
// etcd 集群的地址集合
Endpoints: []string{"192.168.10.10:2379"},
// 请求超时时间
DialTimeout: time.Second * 3,
Username: "xingyys",
Password: "123",
})
defer authCli.Close()
_, _ = authCli.Put(ctx, "foo", "1")
resp, _ := authCli.Get(ctx, "foo")
for _, v := range resp.Kvs {
log.Printf("%s => %q\n", v.Key, v.Value)
}
_, err := authCli.Txn(ctx).
If(clientv3.Compare(clientv3.Value("zoo1"), ">", "abc")).
Then(clientv3.OpPut("zoo1", "XYZ")).
Else(clientv3.OpPut("zoo1", "ABC")).
Commit()
log.Println(err)
}
|