diff --git a/model/wapi/cntl.py b/model/wapi/cntl.py index f5f50ec2dba5e8addd9503774e76943b8d3c4c6a..68599a35c82a07484a8ea8f3d3b836c6fa8b78df 100644 --- a/model/wapi/cntl.py +++ b/model/wapi/cntl.py @@ -97,27 +97,28 @@ class Mgr(BaseModel): return bcd in [v.name for v in self.get_bcds(conn)] def get_permissions(self, conn): + if self.permission_list is not None: + return self.permission_list + result = execute_wapi_function(conn, [ {'name': 'cntl.mgr.list', 'old': {'is_self': True}}, - {'name': 'cntl.role.list', 'old': { + {'name': 'cntl.role.list', 'idx': 'direct_role_list', 'old': { 'is_directly_assigned': True, 'is_role': True, + }}, + {'name': 'cntl.role.list', 'old': {'is_role': True}, 'idx': 'role_list', 'inner_join_ref': { + 'direct_role_list': 'api_func_cntl_role_hierarchy_gfk_list_is_superset' + }}, + {'name': 'cntl.role.list', 'old': {'is_role': False}, 'idx': 'permission_list', 'inner_join_ref': { + 'role_list': 'api_func_cntl_role_hierarchy_gfk_list_is_superset' }} ], user=self.login_name) - if 'cntl_role_list' not in result.keys() or len(result['cntl_role_list']) == 0: + if 'permission_list' not in result.keys() or len(result['permission_list']) == 0: self.permission_list = [] return self.permission_list - perms = [] - - roles = result['cntl_role_list'] - - for role in roles: - for permission in role['contained_permissions'].keys(): - perms.append(permission) - - self.permission_list = perms + self.permission_list = list(map(lambda x: x['fq_name'], result['permission_list'])) return self.permission_list def has_permission(self, conn, permission: str): diff --git a/util/wapi_util.py b/util/wapi_util.py index 823dbad443cc084764832ec71055b3d790a1397c..a0c6f493ee36388ef234a5995d02e0aea4471fc1 100644 --- a/util/wapi_util.py +++ b/util/wapi_util.py @@ -30,7 +30,7 @@ def execute_wapi_function(conn, request: list[dict[str, str | dict]], user: str user = settings.wapi_netvs_superuser query = """ - select * from wapi_4_0.ta_handler( + select * from wapi_4_1.ta_handler( in_login_name => %(login_name)s, in_http_rq_mthd => 'POST', in_http_rq_body => %(rq)s,