Skip to content

Commit 62641ec

Browse files
committed
Finish rest of the role functions
Signed-off-by: Jin Hai <haijin.chn@gmail.com>
1 parent 5ceb049 commit 62641ec

File tree

3 files changed

+85
-32
lines changed

3 files changed

+85
-32
lines changed

admin/client/admin_client.py

Lines changed: 48 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -772,7 +772,7 @@ def _show_role(self, command):
772772
role_name_tree: Tree = command['role_name']
773773
role_name: str = role_name_tree.children[0].strip("'\"")
774774
print(f"show role: {role_name}")
775-
url = f'http://{self.host}:{self.port}/api/v1/admin/roles/{role_name}/permissions'
775+
url = f'http://{self.host}:{self.port}/api/v1/admin/roles/{role_name}/permission'
776776
response = requests.get(
777777
url,
778778
auth=HTTPBasicAuth(self.admin_account, self.admin_password)
@@ -794,7 +794,18 @@ def _grant_permission(self, command):
794794
action_str: str = action_tree.children[0].strip("'\"")
795795
actions.append(action_str)
796796
print(f"grant role_name: {role_name_str}, resource: {resource_str}, actions: {actions}")
797-
pass
797+
url = f'http://{self.host}:{self.port}/api/v1/admin/roles/{role_name_str}/permission'
798+
response = requests.post(
799+
url,
800+
auth=HTTPBasicAuth(self.admin_account, self.admin_password),
801+
json={'actions': actions, 'resource': resource_str}
802+
)
803+
res_json = response.json()
804+
if response.status_code == 200:
805+
self._print_table_simple(res_json['data'])
806+
else:
807+
print(
808+
f"Fail to grant role {role_name_str} with {actions} on {resource_str}, code: {res_json['code']}, message: {res_json['message']}")
798809

799810
def _revoke_permission(self, command):
800811
role_name_tree: Tree = command['role_name']
@@ -807,21 +818,53 @@ def _revoke_permission(self, command):
807818
action_str: str = action_tree.children[0].strip("'\"")
808819
actions.append(action_str)
809820
print(f"revoke role_name: {role_name_str}, resource: {resource_str}, actions: {actions}")
810-
pass
821+
url = f'http://{self.host}:{self.port}/api/v1/admin/roles/{role_name_str}/permission'
822+
response = requests.delete(
823+
url,
824+
auth=HTTPBasicAuth(self.admin_account, self.admin_password),
825+
json={'actions': actions, 'resource': resource_str}
826+
)
827+
res_json = response.json()
828+
if response.status_code == 200:
829+
self._print_table_simple(res_json['data'])
830+
else:
831+
print(
832+
f"Fail to revoke role {role_name_str} with {actions} on {resource_str}, code: {res_json['code']}, message: {res_json['message']}")
811833

812834
def _alter_user_role(self, command):
813835
role_name_tree: Tree = command['role_name']
814836
role_name_str: str = role_name_tree.children[0].strip("'\"")
815837
user_name_tree: Tree = command['user_name']
816838
user_name_str: str = user_name_tree.children[0].strip("'\"")
817839
print(f"alter_user_role user_name: {user_name_str}, role_name: {role_name_str}")
818-
pass
840+
url = f'http://{self.host}:{self.port}/api/v1/admin/users/{user_name_str}/role'
841+
response = requests.put(
842+
url,
843+
auth=HTTPBasicAuth(self.admin_account, self.admin_password),
844+
json={'role_name': role_name_str}
845+
)
846+
res_json = response.json()
847+
if response.status_code == 200:
848+
self._print_table_simple(res_json['data'])
849+
else:
850+
print(
851+
f"Fail to alter user: {user_name_str} to role {role_name_str}, code: {res_json['code']}, message: {res_json['message']}")
819852

820853
def _show_user_permission(self, command):
821854
user_name_tree: Tree = command['user_name']
822855
user_name_str: str = user_name_tree.children[0].strip("'\"")
823856
print(f"show_user_permission user_name: {user_name_str}")
824-
pass
857+
url = f'http://{self.host}:{self.port}/api/v1/admin/users/{user_name_str}/permission'
858+
response = requests.get(
859+
url,
860+
auth=HTTPBasicAuth(self.admin_account, self.admin_password)
861+
)
862+
res_json = response.json()
863+
if response.status_code == 200:
864+
self._print_table_simple(res_json['data'])
865+
else:
866+
print(
867+
f"Fail to show user: {user_name_str} permission, code: {res_json['code']}, message: {res_json['message']}")
825868

826869
def _handle_meta_command(self, command):
827870
meta_command = command['command']

admin/server/roles.py

Lines changed: 16 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -47,23 +47,31 @@ def list_roles() -> Dict[str, Any]:
4747
raise AdminException(error_msg)
4848

4949
@staticmethod
50-
def get_role_permissions(role_name: str) -> Dict[str, Any]:
50+
def get_role_permission(role_name: str) -> Dict[str, Any]:
5151
error_msg = f"not implement: show role {role_name}"
5252
logging.error(error_msg)
5353
raise AdminException(error_msg)
5454

5555
@staticmethod
56-
def grant_role_permissions(role_name: str, permissions: str) -> Dict[str, Any]:
57-
raise AdminException(f"Not implement {inspect.currentframe().f_code.co_name}")
56+
def grant_role_permission(role_name: str, actions: list, resource: str) -> Dict[str, Any]:
57+
error_msg = f"not implement: grant role {role_name} actions: {actions} on {resource}"
58+
logging.error(error_msg)
59+
raise AdminException(error_msg)
5860

5961
@staticmethod
60-
def revoke_role_permissions(role_name: str, permissions: str) -> Dict[str, Any]:
61-
raise AdminException(f"Not implement {inspect.currentframe().f_code.co_name}")
62+
def revoke_role_permission(role_name: str, actions: list, resource: str) -> Dict[str, Any]:
63+
error_msg = f"not implement: revoke role {role_name} actions: {actions} on {resource}"
64+
logging.error(error_msg)
65+
raise AdminException(error_msg)
6266

6367
@staticmethod
6468
def update_user_role(user_name: str, role_name: str) -> Dict[str, Any]:
65-
raise AdminException(f"Not implement {inspect.currentframe().f_code.co_name}")
69+
error_msg = f"not implement: update user role: {user_name} to role {role_name}"
70+
logging.error(error_msg)
71+
raise AdminException(error_msg)
6672

6773
@staticmethod
68-
def get_user_permissions(user_name: str) -> Dict[str, Any]:
69-
raise AdminException(f"Not implement {inspect.currentframe().f_code.co_name}")
74+
def get_user_permission(user_name: str) -> Dict[str, Any]:
75+
error_msg = f"not implement: get user permission: {user_name}"
76+
logging.error(error_msg)
77+
raise AdminException(error_msg)

admin/server/routes.py

Lines changed: 21 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -259,39 +259,41 @@ def list_roles():
259259
return error_response(str(e), 500)
260260

261261

262-
@admin_bp.route('/roles/<role_name>/permissions', methods=['GET'])
262+
@admin_bp.route('/roles/<role_name>/permission', methods=['GET'])
263263
@login_verify
264-
def get_role_permissions(role_name: str):
264+
def get_role_permission(role_name: str):
265265
try:
266-
res = RoleMgr.get_role_permissions(role_name)
266+
res = RoleMgr.get_role_permission(role_name)
267267
return success_response(res)
268268
except Exception as e:
269269
return error_response(str(e), 500)
270270

271271

272-
@admin_bp.route('/roles/<role_name>/permissions', methods=['POST'])
272+
@admin_bp.route('/roles/<role_name>/permission', methods=['POST'])
273273
@login_verify
274-
def grant_role_permissions(role_name: str):
274+
def grant_role_permission(role_name: str):
275275
try:
276276
data = request.get_json()
277-
if not data or 'permissions' not in data:
278-
return error_response("Permissions are required", 400)
279-
permissions: str = data['role_description']
280-
res = RoleMgr.grant_role_permissions(role_name, permissions)
277+
if not data or 'actions' not in data or 'resource' not in data:
278+
return error_response("Permission is required", 400)
279+
actions: list = data['actions']
280+
resource: str = data['resource']
281+
res = RoleMgr.grant_role_permission(role_name, actions, resource)
281282
return success_response(res)
282283
except Exception as e:
283284
return error_response(str(e), 500)
284285

285286

286-
@admin_bp.route('/roles/<role_name>/permissions/batch', methods=['DELETE'])
287+
@admin_bp.route('/roles/<role_name>/permission', methods=['DELETE'])
287288
@login_verify
288-
def revoke_role_permissions(role_name: str):
289+
def revoke_role_permission(role_name: str):
289290
try:
290291
data = request.get_json()
291-
if not data or 'permissions' not in data:
292-
return error_response("Permissions are required", 400)
293-
permissions: str = data['role_description']
294-
res = RoleMgr.revoke_role_permissions(role_name, permissions)
292+
if not data or 'actions' not in data or 'resource' not in data:
293+
return error_response("Permission is required", 400)
294+
actions: list = data['actions']
295+
resource: str = data['resource']
296+
res = RoleMgr.revoke_role_permission(role_name, actions, resource)
295297
return success_response(res)
296298
except Exception as e:
297299
return error_response(str(e), 500)
@@ -302,7 +304,7 @@ def revoke_role_permissions(role_name: str):
302304
def update_user_role(user_name: str):
303305
try:
304306
data = request.get_json()
305-
if not data or 'permissions' not in data:
307+
if not data or 'role_name' not in data:
306308
return error_response("Role name is required", 400)
307309
role_name: str = data['role_name']
308310
res = RoleMgr.update_user_role(user_name, role_name)
@@ -311,11 +313,11 @@ def update_user_role(user_name: str):
311313
return error_response(str(e), 500)
312314

313315

314-
@admin_bp.route('/users/<user_name>/permissions', methods=['GET'])
316+
@admin_bp.route('/users/<user_name>/permission', methods=['GET'])
315317
@login_verify
316-
def get_user_permissions(user_name: str):
318+
def get_user_permission(user_name: str):
317319
try:
318-
res = RoleMgr.get_user_permissions(user_name)
320+
res = RoleMgr.get_user_permission(user_name)
319321
return success_response(res)
320322
except Exception as e:
321323
return error_response(str(e), 500)

0 commit comments

Comments
 (0)