Skip to content

Commit b3d10c2

Browse files
authored
Merge pull request #91 from zilliztech/issue-90
feat: support role apis and update pymilvus
2 parents b61fee7 + fe021c1 commit b3d10c2

13 files changed

Lines changed: 482 additions & 31 deletions

File tree

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,8 @@ Python >= 3.8.5
3030

3131
#### Install from PyPI (Recommended)
3232

33-
Run `pip install pymilvus==2.4.3`
34-
Run `pip install milvus-cli==0.4.3`
33+
Run `pip install pymilvus>=2.4.3`
34+
Run `pip install milvus-cli==1.0.1`
3535

3636
#### Install from a tarball
3737

milvus_cli/Cli.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
from User import MilvusUser
77
from Alias import MilvusAlias
88
from Partition import MilvusPartition
9+
from Role import MilvusRole
910
from pymilvus import __version__
1011

1112

@@ -16,5 +17,6 @@ class MilvusCli(object):
1617
index = MilvusIndex()
1718
data = MilvusData()
1819
user = MilvusUser()
20+
role = MilvusRole()
1921
alias = MilvusAlias()
2022
partition = MilvusPartition()

milvus_cli/Collection.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -56,13 +56,13 @@ def create_collection(
5656
FieldSchema(
5757
name=fieldName,
5858
dtype=DataType[upperFieldType],
59-
max_length=restData[0],
59+
max_length=int(restData[0]),
6060
)
6161
)
6262
elif upperFieldType == "ARRAY":
6363
upperElementType = restData[1].upper()
64-
max_capacity = restData[0]
65-
maxLength = restData[2] if len(restData) == 3 else None
64+
max_capacity = int(restData[0])
65+
maxLength = int(restData[2]) if len(restData) == 3 else None
6666
fieldList.append(
6767
FieldSchema(
6868
name=fieldName,

milvus_cli/Partition.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
from Collection import getTargetCollection
2-
from tabulate import tabulate
32

43

54
class MilvusPartition(object):

milvus_cli/Role.py

Lines changed: 116 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,116 @@
1+
from pymilvus import connections, Role, utility
2+
from tabulate import tabulate
3+
4+
5+
class MilvusRole(object):
6+
def createRole(self, roleName):
7+
try:
8+
role = Role(name=roleName)
9+
role.create()
10+
except Exception as e:
11+
raise Exception(f"Create role error!{str(e)}")
12+
else:
13+
return f"Create role successfully!"
14+
15+
def listRoles(self):
16+
try:
17+
res = utility.list_roles(include_user_info=True)
18+
data = [[role.role_name, role.users] for role in res.groups]
19+
print(tabulate(data, headers=["roleName", "users"], tablefmt="pretty"))
20+
except Exception as e:
21+
raise Exception(f"List role error!{str(e)}")
22+
else:
23+
return res.groups
24+
25+
def dropRole(self, roleName):
26+
try:
27+
role = Role(name=roleName)
28+
role.drop()
29+
except Exception as e:
30+
raise Exception(f"Drop role error!{str(e)}")
31+
else:
32+
return f"Drop role successfully!"
33+
34+
def grantRole(self, roleName, username):
35+
try:
36+
role = Role(name=roleName)
37+
role.add_user(username=username)
38+
users = role.get_users()
39+
print(tabulate([users], headers=["users"], tablefmt="pretty"))
40+
except Exception as e:
41+
raise Exception(f"Grant role error!{str(e)}")
42+
else:
43+
return users
44+
45+
def revokeRole(self, roleName, username):
46+
try:
47+
role = Role(name=roleName)
48+
role.remove_user(username=username)
49+
users = role.get_users()
50+
print(tabulate([users], headers=["users"], tablefmt="pretty"))
51+
except Exception as e:
52+
raise Exception(f"Revoke role error!{str(e)}")
53+
else:
54+
return users
55+
56+
def grantPrivilege(
57+
self, roleName, objectName, objectType, privilege, dbName="default"
58+
):
59+
try:
60+
role = Role(name=roleName)
61+
role.grant(
62+
object=objectType,
63+
privilege=privilege,
64+
object_name=objectName,
65+
db_name=dbName,
66+
)
67+
except Exception as e:
68+
raise Exception(f"Grant privilege error!{str(e)}")
69+
else:
70+
return f"Grant privilege successfully!"
71+
72+
def revokePrivilege(
73+
self, roleName, objectName, objectType, privilege, dbName="default"
74+
):
75+
try:
76+
role = Role(name=roleName)
77+
role.revoke(
78+
object=objectType,
79+
privilege=privilege,
80+
object_name=objectName,
81+
db_name=dbName,
82+
)
83+
except Exception as e:
84+
raise Exception(f"Revoke privilege error!{str(e)}")
85+
else:
86+
return f"Revoke privilege successfully!"
87+
88+
def listGrants(self, roleName, objectName, objectType):
89+
try:
90+
role = Role(name=roleName)
91+
grants = role.list_grant(object=objectType, object_name=objectName)
92+
headers = [
93+
"Object",
94+
"Object Name",
95+
"DB Name",
96+
"Role Name",
97+
"Grantor Name",
98+
"Privilege",
99+
]
100+
data = [
101+
[
102+
grant.object,
103+
grant.object_name,
104+
grant.db_name,
105+
grant.role_name,
106+
grant.grantor_name,
107+
grant.privilege,
108+
]
109+
for grant in grants.groups
110+
]
111+
112+
print(tabulate(data, headers=headers, tablefmt="pretty"))
113+
except Exception as e:
114+
raise Exception(f"List grants error!{str(e)}")
115+
else:
116+
return data

milvus_cli/Types.py

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -171,3 +171,55 @@ def __str__(self):
171171
}
172172

173173
Operators = ["<", "<=", ">", ">=", "==", "!=", "in"]
174+
175+
Privileges = [
176+
"CreateIndex",
177+
"DropIndex",
178+
"IndexDetail",
179+
"Load",
180+
"GetLoadingProgress",
181+
"GetLoadState",
182+
"Release",
183+
"Insert",
184+
"Delete",
185+
"Upsert",
186+
"Search",
187+
"Flush",
188+
"GetFlushState",
189+
"Query",
190+
"GetStatistics",
191+
"Compaction",
192+
"Import",
193+
"LoadBalance",
194+
"CreatePartition",
195+
"DropPartition",
196+
"ShowPartitions",
197+
"HasPartition",
198+
"All",
199+
"CreateCollection",
200+
"DropCollection",
201+
"DescribeCollection",
202+
"ShowCollections",
203+
"RenameCollection",
204+
"FlushAll",
205+
"CreateOwnership",
206+
"DropOwnership",
207+
"SelectOwnership",
208+
"ManageOwnership",
209+
"CreateResourceGroup",
210+
"DropResourceGroup",
211+
"DescribeResourceGroup",
212+
"ListResourceGroups",
213+
"TransferNode",
214+
"TransferReplica",
215+
"CreateDatabase",
216+
"DropDatabase",
217+
"ListDatabases",
218+
"CreateAlias",
219+
"DropAlias",
220+
"DescribeAlias",
221+
"ListAliases",
222+
"UpdateUser",
223+
"SelectUser",
224+
"*",
225+
]

milvus_cli/scripts/helper_cli.py

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def show(obj):
4444
@cli.group("list", no_args_is_help=False)
4545
@click.pass_obj
4646
def getList(obj):
47-
"""List collections,databases, partitions,users or indexes."""
47+
"""List collections,databases, partitions, users, grants or indexes."""
4848
pass
4949

5050

@@ -58,7 +58,21 @@ def rename(obj):
5858
@cli.group("create", no_args_is_help=False)
5959
@click.pass_obj
6060
def create(obj):
61-
"""Create collection, database, partition,user or index."""
61+
"""Create collection, database, partition,user,role or index."""
62+
pass
63+
64+
65+
@cli.group("grant", no_args_is_help=False)
66+
@click.pass_obj
67+
def grant(obj):
68+
"""Grant role, privilege."""
69+
pass
70+
71+
72+
@cli.group("revoke", no_args_is_help=False)
73+
@click.pass_obj
74+
def revoke(obj):
75+
"""Revoke role, privilege."""
6276
pass
6377

6478

@@ -79,7 +93,7 @@ def release(obj):
7993
@cli.group("delete", no_args_is_help=False)
8094
@click.pass_obj
8195
def delete(obj):
82-
"""Delete collection, database, partition,alias,user or index."""
96+
"""Delete collection, database, partition,alias,user, role or index."""
8397
pass
8498

8599

milvus_cli/scripts/milvus_cli.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from .user_cli import *
88
from .alias_cli import *
99
from .partition_cli import *
10-
10+
from .role_cli import *
1111

1212
if __name__ == "__main__":
1313
runCliPrompt()

0 commit comments

Comments
 (0)