Hi,
PFA patch for server utility functions to parse privileges.
--
*Harshal Dhumal*
*Software Engineer *
EenterpriseDB <http://www.enterprisedb.com>
diff --git a/web/pgadmin/browser/server_groups/servers/utils.py b/web/pgadmin/browser/server_groups/servers/utils.py
new file mode 100644
index 0000000..d765d91
--- /dev/null
+++ b/web/pgadmin/browser/server_groups/servers/utils.py
@@ -0,0 +1,94 @@
+##########################################################################
+#
+# pgAdmin 4 - PostgreSQL Tools
+#
+# Copyright (C) 2013 - 2016, The pgAdmin Development Team
+# This software is released under the PostgreSQL Licence
+#
+##########################################################################
+
+"""Server helper utilities"""
+
+
+def parse_priv_from_db(db_privileges):
+ """
+ Common utility function to parse privileges retrieved from database.
+ """
+ acl = {'grantor':db_privileges['grantor'],
+ 'grantee':db_privileges['grantee'],
+ 'privileges':[]
+ }
+
+ privileges = []
+ for idx, priv in enumerate(db_privileges['privileges']):
+ if db_privileges['grantable'][idx]:
+ privileges.append({"privilege_type": priv,
+ "privilege": True,
+ "with_grant": True
+ })
+ else:
+ privileges.append({"privilege_type": priv,
+ "privilege": True,
+ "with_grant": False
+ })
+
+ acl['privileges'] = privileges
+
+ return acl
+
+
+def parse_priv_to_db(str_privileges, object_type = None):
+ """
+ Common utility function to parse privileges before sending to database.
+ """
+ db_privileges = {
+ 'c': 'CONNECT',
+ 'C': 'CREATE',
+ 'T': 'TEMPORARY',
+ 'a': 'INSERT',
+ 'r': 'SELECT',
+ 'w': 'UPDATE',
+ 'd': 'DELETE',
+ 'D': 'TRUNCATE',
+ 'x': 'REFERENCES',
+ 't': 'TRIGGER',
+ 'U': 'USAGE',
+ 'X': 'EXECUTE'
+ }
+ privileges_max_cnt = {
+ 'DATABASE': 3,
+ 'TABLESPACE': 2,
+ 'SCHEMA': 2
+ }
+
+ privileges = []
+
+ for priv in str_privileges:
+ priv_with_grant = []
+ priv_without_grant = []
+ for privilege in priv['privileges']:
+ if privilege['with_grant']:
+ priv_with_grant.append(
+ db_privileges[privilege['privilege_type']]
+ )
+ elif privilege['privilege']:
+ priv_without_grant.append(
+ db_privileges[privilege['privilege_type']]
+ )
+
+ if object_type in ("DATABASE", "SCHEMA", "TABLESPACE"):
+ priv_with_grant = ", ".join(priv_with_grant) if (
+ len(priv_with_grant) < privileges_max_cnt[object_type.upper()]
+ ) else 'ALL'
+ priv_without_grant = ", ".join(priv_without_grant) if (
+ len(priv_without_grant) < privileges_max_cnt[object_type.upper()]
+ ) else 'ALL'
+ else:
+ priv_with_grant = ", ".join(priv_with_grant)
+ priv_without_grant = ", ".join(priv_without_grant)
+
+ privileges.append({'grantee': priv['grantee'],
+ 'with_grant': priv_with_grant,
+ 'without_grant': priv_without_grant})
+
+ return privileges
--
Sent via pgadmin-hackers mailing list ([email protected])
To make changes to your subscription:
http://www.postgresql.org/mailpref/pgadmin-hackers