diff --git a/sql/query.py b/sql/query.py index 48bfac7b20..2e2bc62382 100644 --- a/sql/query.py +++ b/sql/query.py @@ -74,7 +74,7 @@ def query(request): limit_num = priv_check_info['data']['limit_num'] priv_check = priv_check_info['data']['priv_check'] else: - result['status'] = 1 + result['status'] = priv_check_info['status'] result['msg'] = priv_check_info['msg'] return HttpResponse(json.dumps(result), content_type='application/json') # explain的limit_num设置为0 diff --git a/sql/query_privileges.py b/sql/query_privileges.py index 39a3de9d55..9257e23071 100644 --- a/sql/query_privileges.py +++ b/sql/query_privileges.py @@ -72,7 +72,8 @@ def query_priv_check(user, instance, db_name, sql_content, limit_num): # 既无库权限也无表权限则鉴权失败 if not _db_priv(user, instance, table['schema']) and \ not _tb_priv(user, instance, table['schema'], table['name']): - result['status'] = 1 + # 没有库表查询权限时的staus为2 + result['status'] = 2 result['msg'] = f"你无{table['schema']}.{table['name']}表的查询权限!请先到查询权限管理进行申请" return result # 获取查询涉及库/表权限的最小limit限制,和前端传参作对比,取最小值 @@ -99,7 +100,8 @@ def query_priv_check(user, instance, db_name, sql_content, limit_num): # 校验库权限,无库权限直接返回 for db_name in dbs: if not _db_priv(user, instance, db_name): - result['status'] = 1 + # 没有库表查询权限时的staus为2 + result['status'] = 2 result['msg'] = f"你无{db_name}数据库的查询权限!请先到查询权限管理进行申请" return result # 有所有库权限则获取最小limit值 diff --git a/sql/templates/sqlquery.html b/sql/templates/sqlquery.html index 5cf58c8b1f..cb44c39b81 100644 --- a/sql/templates/sqlquery.html +++ b/sql/templates/sqlquery.html @@ -835,7 +835,15 @@ escape: false, columns: [{ field: 'error', - title: 'Error' + title: 'Error', + formatter: function (value, row, index) { + //staus为2的时候,增加申请链接 + if (data.status === 2) { + return value + "" + "(提交申请)" + "" + } else { + return value + } + } }], data: [{ error: data.msg diff --git a/sql/tests.py b/sql/tests.py index 6f2eb4ca5b..36da65dc4e 100644 --- a/sql/tests.py +++ b/sql/tests.py @@ -553,7 +553,7 @@ def test_query_priv_check_no_priv(self, __db_priv, __tb_priv, __table_ref): instance=self.slave, db_name=self.db_name, sql_content="select * from archery.sql_users;", limit_num=100) - self.assertDictEqual(r, {'status': 1, 'msg': '你无archery.sql_users表的查询权限!请先到查询权限管理进行申请', + self.assertDictEqual(r, {'status': 2, 'msg': '你无archery.sql_users表的查询权限!请先到查询权限管理进行申请', 'data': {'priv_check': True, 'limit_num': 0}}) @patch('sql.query_privileges._table_ref', return_value=[{'schema': 'archery', 'name': 'sql_users'}]) @@ -630,7 +630,7 @@ def test_query_priv_check_not_mysql_db_priv_not_exist(self, __db_priv): limit_num=100) self.assertDictEqual(r, {'data': {'limit_num': 0, 'priv_check': True}, 'msg': '你无archery数据库的查询权限!请先到查询权限管理进行申请', - 'status': 1}) + 'status': 2}) class TestQueryPrivilegesApply(TestCase):