From f995bf2d3948742bea9c09f25c5e8d17beaf8151 Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Wed, 14 Jan 2026 15:54:46 +0530 Subject: [PATCH 1/2] Add new options like INHERIT and SET to the Role's membership tab. #6451 --- docs/en_US/images/role_membership.png | Bin 36859 -> 51639 bytes docs/en_US/images/role_sql.png | Bin 67970 -> 71919 bytes docs/en_US/role_dialog.rst | 21 +- .../server_groups/servers/roles/__init__.py | 204 +++++++----- .../servers/roles/static/js/role.ui.js | 10 +- .../templates/roles/sql/16_plus/create.sql | 62 ++++ .../roles/sql/16_plus/properties.sql | 37 +++ .../roles/templates/roles/sql/16_plus/sql.sql | 130 ++++++++ .../templates/roles/sql/16_plus/update.sql | 119 +++++++ .../templates/roles/sql/default/create.sql | 22 +- .../templates/roles/sql/default/update.sql | 52 ++- .../16_plus/alter_login_role_description.msql | 1 + .../16_plus/alter_login_role_description.sql | 13 + .../tests/16_plus/alter_login_role_name.msql | 2 + .../tests/16_plus/alter_login_role_name.sql | 13 + .../16_plus/alter_login_role_options.msql | 12 + .../16_plus/alter_login_role_options.sql | 18 ++ .../tests/16_plus/alter_role_description.msql | 1 + .../tests/16_plus/alter_role_description.sql | 13 + .../roles/tests/16_plus/alter_role_name.msql | 2 + .../roles/tests/16_plus/alter_role_name.sql | 13 + .../tests/16_plus/alter_role_options1.msql | 19 ++ .../tests/16_plus/alter_role_options1.sql | 21 ++ .../tests/16_plus/alter_role_options2.msql | 7 + .../tests/16_plus/alter_role_options2.sql | 21 ++ .../tests/16_plus/alter_role_options3.msql | 3 + .../tests/16_plus/alter_role_options3.sql | 20 ++ .../tests/16_plus/alter_role_options4.msql | 7 + .../tests/16_plus/alter_role_options4.sql | 21 ++ .../tests/16_plus/create_login_role.msql | 9 + .../roles/tests/16_plus/create_login_role.sql | 11 + .../roles/tests/16_plus/create_role.msql | 9 + .../roles/tests/16_plus/create_role.sql | 11 + .../servers/roles/tests/16_plus/test.json | 299 ++++++++++++++++++ .../tests/default/alter_role_options1.msql | 6 + .../tests/default/alter_role_options2.msql | 7 +- .../tests/default/alter_role_options3.msql | 2 + .../tests/default/alter_role_options4.msql | 8 +- .../tests/default/alter_role_options4.sql | 3 +- .../servers/roles/tests/default/test.json | 59 +++- .../servers/static/js/membership.ui.js | 31 +- .../DataGridView/utils/createGridColumns.jsx | 4 +- web/pgadmin/static/js/SchemaView/common.js | 13 + 43 files changed, 1204 insertions(+), 132 deletions(-) create mode 100644 web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/create.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/properties.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/sql.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/update.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_description.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_description.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_name.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_name.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_options.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_options.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_description.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_description.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_name.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_name.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options1.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options1.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options2.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options2.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options3.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options3.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options4.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options4.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_login_role.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_login_role.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_role.msql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_role.sql create mode 100644 web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/test.json diff --git a/docs/en_US/images/role_membership.png b/docs/en_US/images/role_membership.png index 55ec9fd1264ade32a38c70dddcbd3a35c1685a23..1da4b505e629e7614fecad4f356fb8c5137f30e0 100644 GIT binary patch literal 51639 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%0DvrpMg;vVB&DFI1HK}5cqw=%tQ&*GF!)B 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

h1%a?}f;4mVJ1I+hG9%?Mv19C6 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 literal 36859 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 diff --git a/docs/en_US/images/role_sql.png b/docs/en_US/images/role_sql.png index 5ba387fbbbfbccb0b94ec9debfbf9b8a359b736d..fa4a3d5450c9c6bb3d7f2e68e8009cacceff2ece 100644 GIT binary patch literal 71919 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 T@juU%5y|D&>o+-4PYeGKlz|#$ literal 67970 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 16. Click the *Parameters* tab to continue. diff --git a/web/pgadmin/browser/server_groups/servers/roles/__init__.py b/web/pgadmin/browser/server_groups/servers/roles/__init__.py index 45e2cc5f34e..15ecd9cc15c 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/__init__.py +++ b/web/pgadmin/browser/server_groups/servers/roles/__init__.py @@ -207,40 +207,32 @@ def _process_rolemembership(self, id, data): :param id: id of role :param data: input role data """ - def _part_dict_list(dict_list, condition, list_key=None): + def _part_dict_list(dict_list, condition): ret_val = [] for d in dict_list: if condition(d): - ret_val.append(d[list_key]) + ret_val.append(d) return ret_val if id == -1: - data['members'] = [] - data['admins'] = [] - - data['admins'] = _part_dict_list( - data['rolmembership'], lambda d: d['admin'], 'role') - data['members'] = _part_dict_list( - data['rolmembership'], lambda d: not d['admin'], 'role') + data['rolmembership_list'] = data['rolmembership'] else: - data['admins'] = _part_dict_list( - data['rolmembership'].get('added', []), - lambda d: d['admin'], 'role') - data['members'] = _part_dict_list( - data['rolmembership'].get('added', []), - lambda d: not d['admin'], 'role') - - data['admins'].extend(_part_dict_list( - data['rolmembership'].get('changed', []), - lambda d: d['admin'], 'role')) - data['revoked_admins'] = _part_dict_list( - data['rolmembership'].get('changed', []), - lambda d: not d['admin'], 'role') - - data['revoked'] = _part_dict_list( - data['rolmembership'].get('deleted', []), - lambda _: True, 'role') + data['rolmembership_list'] = data['rolmembership'].get('added', []) + + if self.manager.version < 160000: + data['rolmembership_list'].extend(_part_dict_list( + data['rolmembership'].get('changed', []), + lambda d: d['admin'])) + data['rolmembership_revoked_admins'] = _part_dict_list( + data['rolmembership'].get('changed', []), + lambda d: not d['admin']) + else: + data['rolmembership_list'].extend( + data['rolmembership'].get('changed', [])) + + data['rolmembership_revoked_list'] = ( + data['rolmembership'].get('deleted', [])) def _process_rolmembers(self, id, data): """ @@ -248,39 +240,32 @@ def _process_rolmembers(self, id, data): :param id: :param data: """ - def _part_dict_list(dict_list, condition, list_key=None): + def _part_dict_list(dict_list, condition): ret_val = [] for d in dict_list: if condition(d): - ret_val.append(d[list_key]) + ret_val.append(d) return ret_val if id == -1: - data['rol_members'] = [] - data['rol_admins'] = [] + data['rol_members_list'] = data['rolmembers'] - data['rol_admins'] = _part_dict_list( - data['rolmembers'], lambda d: d['admin'], 'role') - data['rol_members'] = _part_dict_list( - data['rolmembers'], lambda d: not d['admin'], 'role') else: - data['rol_admins'] = _part_dict_list( - data['rolmembers'].get('added', []), - lambda d: d['admin'], 'role') - data['rol_members'] = _part_dict_list( - data['rolmembers'].get('added', []), - lambda d: not d['admin'], 'role') - - data['rol_admins'].extend(_part_dict_list( - data['rolmembers'].get('changed', []), - lambda d: d['admin'], 'role')) - data['rol_revoked_admins'] = _part_dict_list( - data['rolmembers'].get('changed', []), - lambda d: not d['admin'], 'role') - - data['rol_revoked'] = _part_dict_list( - data['rolmembers'].get('deleted', []), - lambda _: True, 'role') + data['rol_members_list'] = data['rolmembers'].get('added', []) + + if self.manager.version < 160000: + data['rol_members_list'].extend(_part_dict_list( + data['rolmembers'].get('changed', []), + lambda d: d['admin'])) + data['rol_members_revoked_admins'] = _part_dict_list( + data['rolmembers'].get('changed', []), + lambda d: not d['admin']) + else: + data['rol_members_list'].extend( + data['rolmembers'].get('changed', [])) + + data['rol_members_revoked_list'] = ( + data['rolmembers'].get('deleted', [])) def _validate_rolemembers(self, id, data): """ @@ -298,13 +283,21 @@ def _validate_rolemembers(self, id, data): rolmembers:[{ role: [rolename], - admin: True/False + admin: True/False, + inherit: True/False, + set: True/False, }, ... ]""") - if not self._validate_input_dict_for_new(data['rolmembers'], - ['role', 'admin']): + if (self.manager.version < 160000 and + not self._validate_input_dict_for_new( + data['rolmembers'], ['role', 'admin'])): + return msg + elif (self.manager.version >= 160000 and + not self._validate_input_dict_for_new( + data['rolmembers'], + ['role', 'admin', 'inherit', 'set'])): return msg self._process_rolmembers(id, data) @@ -316,26 +309,38 @@ def _validate_rolemembers(self, id, data): rolmembers:{ 'added': [{ role: [rolename], - admin: True/False + admin: True/False, + inherit: True/False, + set: True/False, }, ... ], 'deleted': [{ role: [rolename], - admin: True/False + admin: True/False, + inherit: True/False, + set: True/False, }, ... ], 'updated': [{ role: [rolename], - admin: True/False + admin: True/False, + inherit: True/False, + set: True/False, }, ... ] """) - if not self._validate_input_dict_for_update(data['rolmembers'], - ['role', 'admin'], - ['role']): + if (self.manager.version < 160000 and + not self._validate_input_dict_for_update( + data['rolmembers'], ['role', 'admin'], ['role'])): + return msg + elif (self.manager.version >= 160000 and + not self._validate_input_dict_for_update( + data['rolmembers'], + ['role', 'admin', 'inherit', 'set'], + ['role'])): return msg self._process_rolmembers(id, data) @@ -357,13 +362,21 @@ def _validate_rolemembership(self, id, data): rolmembership:[{ role: [rolename], - admin: True/False + admin: True/False, + inherit: True/False, + set: True/False, }, ... ]""") - if not self._validate_input_dict_for_new( - data['rolmembership'], ['role', 'admin']): + if (self.manager.version < 160000 and + not self._validate_input_dict_for_new( + data['rolmembership'], ['role', 'admin'])): + return msg + elif (self.manager.version >= 160000 and + not self._validate_input_dict_for_new( + data['rolmembership'], + ['role', 'admin', 'inherit', 'set'])): return msg self._process_rolemembership(id, data) @@ -375,25 +388,38 @@ def _validate_rolemembership(self, id, data): rolmembership:{ 'added': [{ role: [rolename], - admin: True/False + admin: True/False, + inherit: True/False, + set: True/False, }, ... ], 'deleted': [{ role: [rolename], - admin: True/False + admin: True/False, + inherit: True/False, + set: True/False, }, ... ], 'updated': [{ role: [rolename], - admin: True/False + admin: True/False, + inherit: True/False, + set: True/False, }, ... ] """) - if not self._validate_input_dict_for_update( - data['rolmembership'], ['role', 'admin'], ['role']): + if (self.manager.version < 160000 and + not self._validate_input_dict_for_update( + data['rolmembership'], ['role', 'admin'], ['role'])): + return msg + elif (self.manager.version >= 160000 and + not self._validate_input_dict_for_update( + data['rolmembership'], + ['role', 'admin', 'inherit', 'set'], + ['role'])): return msg self._process_rolemembership(id, data) @@ -792,16 +818,25 @@ def _set_seclabels(self, row): }) row['seclabels'] = res - def _set_rolemembership(self, row): + def _set_rolemembers(self, row): if 'rolmembers' in row and row['rolmembers'] is not None: rolmembers = [] for role in row['rolmembers']: - role = re.search(r'([01])(.+)', role) - rolmembers.append({ - 'role': role.group(2), - 'admin': True if role.group(1) == '1' else False - }) + if self.manager.version < 160000: + role = re.search(r'([01])(.+)', role) + rolmembers.append({ + 'role': role.group(2), + 'admin': True if role.group(1) == '1' else False + }) + else: + role = re.search(r'([01])([01])([01])(.+)', role) + rolmembers.append({ + 'role': role.group(4), + 'admin': True if role.group(1) == '1' else False, + 'inherit': True if role.group(2) == '1' else False, + 'set': True if role.group(3) == '1' else False + }) row['rolmembers'] = rolmembers def transform(self, rset): @@ -810,14 +845,23 @@ def transform(self, rset): roles = row['rolmembership'] row['rolpassword'] = '' for role in roles: - role = re.search(r'([01])(.+)', role) - res.append({ - 'role': role.group(2), - 'admin': True if role.group(1) == '1' else False - }) + if self.manager.version < 160000: + role = re.search(r'([01])(.+)', role) + res.append({ + 'role': role.group(2), + 'admin': True if role.group(1) == '1' else False + }) + else: + role = re.search(r'([01])([01])([01])(.+)', role) + res.append({ + 'role': role.group(4), + 'admin': True if role.group(1) == '1' else False, + 'inherit': True if role.group(2) == '1' else False, + 'set': True if role.group(3) == '1' else False + }) row['rolmembership'] = res self._set_seclabels(row) - self._set_rolemembership(row) + self._set_rolemembers(row) @check_precondition(action='properties') def properties(self, gid, sid, rid): diff --git a/web/pgadmin/browser/server_groups/servers/roles/static/js/role.ui.js b/web/pgadmin/browser/server_groups/servers/roles/static/js/role.ui.js index 5bf596fcc5a..098b0e52924 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/static/js/role.ui.js +++ b/web/pgadmin/browser/server_groups/servers/roles/static/js/role.ui.js @@ -58,12 +58,12 @@ export default class RoleSchema extends BaseUISchema { memberDataFormatter(rawData) { let members = ''; if(_.isObject(rawData)) { + const serverVersion = this.nodeInfo && this.nodeInfo.server && this.nodeInfo.server.version || 0; rawData.forEach(member => { - let withAdmin = ''; - if(member.admin) { withAdmin = ' [WITH ADMIN]';} + let badges = serverVersion >= 160000 ? ` [WITH ADMIN ${member.admin.toString().toUpperCase()}, INHERIT ${member.inherit.toString().toUpperCase()}, SET ${member.set.toString().toUpperCase()}]` : member.admin ? ' [WITH ADMIN OPTION]' : ''; if (members.length > 0) { members += ', '; } - members = members + (member.role + withAdmin); + members = members + (member.role + badges); }); } return members; @@ -177,7 +177,7 @@ export default class RoleSchema extends BaseUISchema { type: 'text', controlProps: { formatter: { - fromRaw: obj.memberDataFormatter, + fromRaw: (raw) => obj.memberDataFormatter(raw), }, } }, @@ -198,7 +198,7 @@ export default class RoleSchema extends BaseUISchema { type: 'text', controlProps: { formatter: { - fromRaw: obj.memberDataFormatter, + fromRaw: (raw) => obj.memberDataFormatter(raw), }, } }, diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/create.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/create.sql new file mode 100644 index 00000000000..5aa6f2d1e1e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/create.sql @@ -0,0 +1,62 @@ +{% import 'macros/security.macros' as SECLABEL %} +{% import 'macros/variable.macros' as VARIABLE %} +CREATE ROLE {{ conn|qtIdent(data.rolname) }} WITH{% if data.rolcanlogin and data.rolcanlogin is sameas True %} + + LOGIN{% else %} + + NOLOGIN{% endif %}{% if data.rolsuper %} + + SUPERUSER{% else %} + + NOSUPERUSER{% endif %}{% if data.rolcreatedb %} + + CREATEDB{% else %} + + NOCREATEDB{% endif %}{% if data.rolcreaterole %} + + CREATEROLE{% else %} + + NOCREATEROLE{% endif %}{% if data.rolinherit is sameas true %} + + INHERIT{% else %} + + NOINHERIT{% endif %}{% if data.rolreplication %} + + REPLICATION{% else %} + + NOREPLICATION{% endif %}{% if data.rolbypassrls %} + + BYPASSRLS{% else %} + + NOBYPASSRLS{% endif %}{% if 'rolconnlimit' in data and data.rolconnlimit is number and data.rolconnlimit >= -1 %} + + CONNECTION LIMIT {{ data.rolconnlimit }}{% endif %}{% if data.rolvaliduntil and data.rolvaliduntil is not none %} + + VALID UNTIL {{ data.rolvaliduntil|qtLiteral(conn) }} {% endif %}{% if data.rolpassword %} + + PASSWORD {% if data.rolpassword is none %}NULL{% else %}{% if dummy %}'xxxxxx'{% else %} {{ data.rolpassword|qtLiteral(conn) }}{% endif %}{% endif %}{% endif %}; +{% if data.rolmembership_list and data.rolmembership_list|length > 0 %} +{% for item in data.rolmembership_list %} + +GRANT {{ conn|qtIdent(item.role) }} TO {{ conn|qtIdent(data.rolname) }}{% if 'admin' in item or 'inherit' in item or 'set' in item %} WITH ADMIN {{ item.admin }}, INHERIT {{ item.inherit }}, SET {{ item.set }}{% endif %}; +{% endfor %} +{% endif %} +{% if data.seclabels and data.seclabels|length > 0 %} +{% for r in data.seclabels %} + +{{ SECLABEL.APPLY(conn, 'ROLE', data.rolname, r.provider, r.label) }} +{% endfor %}{% endif %}{% if data.variables %} + +{% for var in data.variables %} + +{{ VARIABLE.APPLY(conn, var.database, data.rolname, var.name, var.value) }} +{% endfor %}{% endif %}{% if data.description %} + +COMMENT ON ROLE {{ conn|qtIdent(data.rolname) }} IS {{ data.description|qtLiteral(conn) }}; +{% endif %} +{% if data.rol_members_list and data.rol_members_list|length > 0 %} +{% for item in data.rol_members_list %} + +GRANT {{ conn|qtIdent(data.rolname) }} TO {{ conn|qtIdent(item.role) }}{% if 'admin' in item or 'inherit' in item or 'set' in item %} WITH ADMIN {{ item.admin }}, INHERIT {{ item.inherit }}, SET {{ item.set }}{% endif %}; +{% endfor %} +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/properties.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/properties.sql new file mode 100644 index 00000000000..e98ebaa5186 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/properties.sql @@ -0,0 +1,37 @@ +SELECT + r.oid, r.*, + pg_catalog.shobj_description(r.oid, 'pg_authid') AS description, + ARRAY( + SELECT + CASE WHEN am.admin_option THEN '1' ELSE '0' END + || CASE WHEN am.inherit_option THEN '1' ELSE '0' END + || CASE WHEN am.set_option THEN '1' ELSE '0' END + || rm.rolname + FROM + (SELECT * FROM pg_catalog.pg_auth_members WHERE member = r.oid) am + LEFT JOIN pg_catalog.pg_roles rm ON (rm.oid = am.roleid) + ORDER BY rm.rolname + ) AS rolmembership, + (SELECT pg_catalog.array_agg(provider || '=' || label) FROM pg_catalog.pg_shseclabel sl1 WHERE sl1.objoid=r.oid) AS seclabels + {% if rid %} + ,ARRAY( + SELECT + CASE WHEN pg.admin_option THEN '1' ELSE '0' END + || CASE WHEN pg.inherit_option THEN '1' ELSE '0' END + || CASE WHEN pg.set_option THEN '1' ELSE '0' END + || pg.usename + FROM + (SELECT pg_roles.rolname AS usename, + pg_auth_members.admin_option AS admin_option, + pg_auth_members.inherit_option AS inherit_option, + pg_auth_members.set_option AS set_option + FROM pg_roles + JOIN pg_auth_members ON pg_roles.oid=pg_auth_members.member AND pg_auth_members.roleid={{ rid|qtLiteral(conn) }}::oid) pg + ) rolmembers + {% endif %} +FROM + pg_catalog.pg_roles r +{% if rid %} +WHERE r.oid = {{ rid|qtLiteral(conn) }}::oid +{% endif %} +ORDER BY r.rolcanlogin, r.rolname diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/sql.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/sql.sql new file mode 100644 index 00000000000..455b3b1167f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/sql.sql @@ -0,0 +1,130 @@ +SELECT + pg_catalog.array_to_string(array_agg(sql), E'\n\n') AS sql +FROM +(SELECT + '-- Role: ' || + pg_catalog.quote_ident(rolname) || + E'\n-- DROP ROLE IF EXISTS ' || + pg_catalog.quote_ident(rolname) || E';\n\nCREATE ROLE ' || + pg_catalog.quote_ident(rolname) || E' WITH\n ' || + CASE WHEN rolcanlogin THEN 'LOGIN' ELSE 'NOLOGIN' END || E'\n ' || + CASE WHEN rolsuper THEN 'SUPERUSER' ELSE 'NOSUPERUSER' END || E'\n ' || + CASE WHEN rolinherit THEN 'INHERIT' ELSE 'NOINHERIT' END || E'\n ' || + CASE WHEN rolcreatedb THEN 'CREATEDB' ELSE 'NOCREATEDB' END || E'\n ' || + CASE WHEN rolcreaterole THEN 'CREATEROLE' ELSE 'NOCREATEROLE' END || E'\n ' || + -- PostgreSQL >= 9.1 + CASE WHEN rolreplication THEN 'REPLICATION' ELSE 'NOREPLICATION' END || E'\n ' || + CASE WHEN rolbypassrls THEN 'BYPASSRLS' ELSE 'NOBYPASSRLS' END || + CASE WHEN rolconnlimit > 0 THEN E'\n CONNECTION LIMIT ' || rolconnlimit ELSE '' END || +{% if show_password %} + (SELECT CASE + WHEN (rolpassword LIKE 'md5%%' or rolpassword LIKE 'SCRAM%%') THEN E'\n ENCRYPTED PASSWORD ''' || rolpassword || '''' + WHEN rolpassword IS NOT NULL THEN E'\n PASSWORD ''' || rolpassword || '''' + ELSE '' END FROM pg_catalog.pg_authid au WHERE au.oid=r.oid) || +{% endif %} + CASE WHEN rolvaliduntil IS NOT NULL THEN E'\n VALID UNTIL ' || pg_catalog.quote_literal(rolvaliduntil::text) ELSE '' END || ';' AS sql +FROM + pg_catalog.pg_roles r +WHERE + r.oid=%(rid)s::OID +UNION ALL +(SELECT + pg_catalog.array_to_string(array_agg(sql), E'\n') AS sql +FROM +(SELECT + 'GRANT ' || pg_catalog.array_to_string(pg_catalog.array_agg(rolname ORDER BY rolname), ', ') || ' TO ' || pg_catalog.quote_ident(pg_catalog.pg_get_userbyid(%(rid)s::OID)) || + CASE WHEN admin_option OR inherit_option OR set_option THEN + ' WITH ' || + (CASE WHEN admin_option THEN 'ADMIN OPTION' ELSE '' END || + CASE WHEN inherit_option THEN (CASE WHEN admin_option THEN ', ' ELSE '' END) || 'INHERIT OPTION' ELSE '' END || + CASE WHEN set_option THEN (CASE WHEN admin_option OR inherit_option THEN ', ' ELSE '' END) || 'SET OPTION' ELSE '' END) + ELSE '' END || ';' AS sql +FROM + (SELECT + pg_catalog.quote_ident(r.rolname) AS rolname, + m.admin_option AS admin_option, + m.inherit_option AS inherit_option, + m.set_option AS set_option + FROM + pg_catalog.pg_auth_members m + LEFT JOIN pg_catalog.pg_roles r ON (m.roleid = r.oid) + WHERE + m.member=%(rid)s::OID + ORDER BY + r.rolname + ) a +GROUP BY admin_option, inherit_option, set_option) s) +UNION ALL +(SELECT + pg_catalog.array_to_string(array_agg(sql), E'\n') AS sql +FROM +(SELECT + 'ALTER ROLE ' || pg_catalog.quote_ident(rolname) || ' SET ' || param || ' TO ' || CASE WHEN param IN ('search_path', 'temp_tablespaces') THEN value ELSE pg_catalog.quote_literal(value) END || ';' AS sql +FROM +(SELECT + rolcanlogin, rolname, pg_catalog.split_part(rolconfig, '=', 1) AS param, pg_catalog.replace(rolconfig, pg_catalog.split_part(rolconfig, '=', 1) || '=', '') AS value +FROM + (SELECT + pg_catalog.unnest(rolconfig) AS rolconfig, rolcanlogin, rolname + FROM + pg_catalog.pg_roles + WHERE + oid=%(rid)s::OID + ) r +) a) b) +-- PostgreSQL >= 9.0 +UNION ALL +(SELECT + pg_catalog.array_to_string(array_agg(sql), E'\n') AS sql +FROM + (SELECT + 'ALTER ROLE ' || pg_catalog.quote_ident(pg_get_userbyid(%(rid)s::OID)) || + ' IN DATABASE ' || pg_catalog.quote_ident(datname) || + ' SET ' || param|| ' TO ' || + CASE + WHEN param IN ('search_path', 'temp_tablespaces') THEN value + ELSE pg_catalog.quote_literal(value) + END || ';' AS sql + FROM + (SELECT + datname, pg_catalog.split_part(rolconfig, '=', 1) AS param, pg_catalog.replace(rolconfig, pg_catalog.split_part(rolconfig, '=', 1) || '=', '') AS value + FROM + (SELECT + d.datname, pg_catalog.unnest(c.setconfig) AS rolconfig + FROM + (SELECT * + FROM + pg_catalog.pg_db_role_setting dr + WHERE + dr.setrole=%(rid)s::OID AND dr.setdatabase!=0) c + LEFT JOIN pg_catalog.pg_database d ON (d.oid = c.setdatabase) + ) a + ) b + ) d +) +UNION ALL +(SELECT + 'COMMENT ON ROLE ' || pg_catalog.quote_ident(pg_get_userbyid(%(rid)s::OID)) || ' IS ' || pg_catalog.quote_literal(description) || ';' AS sql +FROM + (SELECT pg_catalog.shobj_description(%(rid)s::OID, 'pg_authid') AS description) a +WHERE + description IS NOT NULL) +-- PostgreSQL >= 9.2 +UNION ALL +(SELECT + pg_catalog.array_to_string(array_agg(sql), E'\n') AS sql +FROM + (SELECT + 'SECURITY LABEL FOR ' || provider || + E'\n ON ROLE ' || pg_catalog.quote_ident(rolname) || + E'\n IS ' || pg_catalog.quote_literal(label) || ';' AS sql + FROM + (SELECT + label, provider, rolname + FROM + (SELECT * + FROM + pg_catalog.pg_shseclabel sl1 + WHERE sl1.objoid=%(rid)s::OID) s + LEFT JOIN pg_catalog.pg_roles r ON (s.objoid=r.oid)) a) b +)) AS a diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/update.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/update.sql new file mode 100644 index 00000000000..a9c3d1b054f --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/16_plus/update.sql @@ -0,0 +1,119 @@ +{% import 'macros/security.macros' as SECLABEL %} +{% import 'macros/variable.macros' as VARIABLE %} +{% if 'rolname' in data %} +{% set rolname=data.rolname %} +ALTER ROLE {{ conn|qtIdent(role) }} + RENAME TO {{ conn|qtIdent(rolname) }}; + +{% else %} +{% set rolname=role %} +{% endif %} +{% if data|hasAny(alterKeys) %} +ALTER ROLE {{ conn|qtIdent(rolname) }}{% if 'rolcanlogin' in data %} + +{% if data.rolcanlogin %} + LOGIN{% else %} + NOLOGIN{% endif %}{% endif %}{% if 'rolsuper' in data %} + +{% if data.rolsuper %} + SUPERUSER{% else %} + NOSUPERUSER{% endif %}{% endif %}{% if 'rolcreatedb' in data %} + +{% if data.rolcreatedb %} + CREATEDB{% else %} + NOCREATEDB{% endif %}{% endif %}{% if 'rolcreaterole' in data %} + +{% if data.rolcreaterole %} + CREATEROLE{% else %} + NOCREATEROLE{% endif %}{% endif %}{% if 'rolinherit' in data %} + +{% if data.rolinherit %} + INHERIT{% else %} + NOINHERIT{% endif %}{% endif %}{% if 'rolreplication' in data %} + +{% if data.rolreplication %} + REPLICATION{% else %} + NOREPLICATION{% endif %}{% endif %}{% if 'rolbypassrls' in data %} + +{% if data.rolbypassrls %} + BYPASSRLS{% else %} + NOBYPASSRLS{% endif %}{% endif %}{% if 'rolconnlimit' in data and data.rolconnlimit is number and data.rolconnlimit >= -1 %} + + CONNECTION LIMIT {{ data.rolconnlimit }} +{% endif %}{% if 'rolvaliduntil' in data %} + + VALID UNTIL {% if data.rolvaliduntil %}{{ data.rolvaliduntil|qtLiteral(conn) }}{% else %}'infinity' +{% endif %}{% endif %}{% if 'rolpassword' in data %} + + PASSWORD{% if data.rolpassword is none %} NULL{% else %}{% if dummy %} 'xxxxxx'{% else %} {{ data.rolpassword|qtLiteral(conn) }}{% endif %}{% endif %}{% endif %};{% endif %} + +{% if data.rolmembership_revoked_list and data.rolmembership_revoked_list|length > 0 %} +{% for item in data.rolmembership_revoked_list %} + +REVOKE {{ conn|qtIdent(item.role) }} FROM {{ conn|qtIdent(rolname) }}; +{% endfor %} +{% endif %} +{% if data.rolmembership_list and data.rolmembership_list|length > 0 %} +{% for item in data.rolmembership_list %} + +GRANT {{ conn|qtIdent(item.role) }} TO {{ conn|qtIdent(rolname) }}{% if 'admin' in item or 'inherit' in item or 'set' in item %} WITH ADMIN {{ item.admin }}, INHERIT {{ item.inherit }}, SET {{ item.set }}{% endif %}; +{% endfor %} +{% endif %} +{% if data.seclabels and + data.seclabels|length > 0 +%}{% set seclabels = data.seclabels %} +{% if 'deleted' in seclabels and seclabels.deleted|length > 0 %} + +{% for r in seclabels.deleted %} +{{ SECLABEL.DROP(conn, 'ROLE', rolname, r.provider) }} +{% endfor %} +{% endif %} +{% if 'added' in seclabels and seclabels.added|length > 0 %} + +{% for r in seclabels.added %} +{{ SECLABEL.APPLY(conn, 'ROLE', rolname, r.provider, r.label) }} +{% endfor %} +{% endif %} +{% if 'changed' in seclabels and seclabels.changed|length > 0 %} + +{% for r in seclabels.changed %} +{{ SECLABEL.APPLY(conn, 'ROLE', rolname, r.provider, r.label) }} +{% endfor %} +{% endif %} +{% endif %} +{% if 'variables' in data and data.variables|length > 0 %} +{% set variables = data.variables %} +{% if 'deleted' in variables and variables.deleted|length > 0 %} + +{% for var in variables.deleted %} +{{ VARIABLE.RESET(conn, var.database, rolname, var.name) }} +{% endfor %}{% endif %} +{% if 'added' in variables and variables.added|length > 0 %} + +{% for var in variables.added %} +{{ VARIABLE.APPLY(conn, var.database, rolname, var.name, var.value) }} +{% endfor %}{% endif %} +{% if 'changed' in variables and variables.changed|length > 0 %} + +{% for var in variables.changed %} +{{ VARIABLE.APPLY(conn, var.database, rolname, var.name, var.value) }} +{% endfor %} +{% endif %} +{% endif %} +{% if 'description' in data %} + + +COMMENT ON ROLE {{ conn|qtIdent(rolname) }} IS {{ data.description|qtLiteral(conn) }}; +{% endif %} +{% if data.rol_members_revoked_list and data.rol_members_revoked_list|length > 0 %} +{% for item in data.rol_members_revoked_list %} + +REVOKE {{ conn|qtIdent(rolname) }} FROM {{ conn|qtIdent(item.role) }}; +{% endfor %} +{% endif %} +{% if data.rol_members_list and data.rol_members_list|length > 0 %} +{% for item in data.rol_members_list %} + +GRANT {{ conn|qtIdent(rolname) }} TO {{ conn|qtIdent(item.role) }} {% if 'admin' in item or 'inherit' in item or 'set' in item %} WITH ADMIN {{ item.admin }}, INHERIT {{ item.inherit }}, SET {{ item.set }}{% endif %}; +{% endfor %} +{% endif %} \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/create.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/create.sql index b2957c45020..90b983c8e22 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/create.sql +++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/create.sql @@ -34,13 +34,14 @@ CREATE ROLE {{ conn|qtIdent(data.rolname) }} WITH{% if data.rolcanlogin and data VALID UNTIL {{ data.rolvaliduntil|qtLiteral(conn) }} {% endif %}{% if data.rolpassword %} - PASSWORD {% if data.rolpassword is none %}NULL{% else %}{% if dummy %}'xxxxxx'{% else %} {{ data.rolpassword|qtLiteral(conn) }}{% endif %}{% endif %}{% endif %};{% if data.members and data.members|length > 0 %} - - -GRANT {{ conn|qtIdent(data.members)|join(', ') }} TO {{ conn|qtIdent(data.rolname) }};{% endif %}{% if data.admins and data.admins|length > 0 %} - -GRANT {{ conn|qtIdent(data.admins)|join(', ') }} TO {{ conn|qtIdent(data.rolname) }} WITH ADMIN OPTION;{% endif %}{% if data.seclabels and data.seclabels|length > 0 %} + PASSWORD {% if data.rolpassword is none %}NULL{% else %}{% if dummy %}'xxxxxx'{% else %} {{ data.rolpassword|qtLiteral(conn) }}{% endif %}{% endif %}{% endif %}; +{% if data.rolmembership_list and data.rolmembership_list|length > 0 %} +{% for item in data.rolmembership_list %} +GRANT {{ conn|qtIdent(item.role) }} TO {{ conn|qtIdent(data.rolname) }}{% if 'admin' in item and item.admin %} WITH ADMIN OPTION{% endif %}; +{% endfor %} +{% endif %} +{% if data.seclabels and data.seclabels|length > 0 %} {% for r in data.seclabels %} {{ SECLABEL.APPLY(conn, 'ROLE', data.rolname, r.provider, r.label) }} @@ -53,10 +54,9 @@ GRANT {{ conn|qtIdent(data.admins)|join(', ') }} TO {{ conn|qtIdent(data.rolname COMMENT ON ROLE {{ conn|qtIdent(data.rolname) }} IS {{ data.description|qtLiteral(conn) }}; {% endif %} +{% if data.rol_members_list and data.rol_members_list|length > 0 %} +{% for item in data.rol_members_list %} -{% if data.rol_admins and data.rol_admins|length > 0 %} - -GRANT {{ conn|qtIdent(data.rolname) }} TO {{ conn|qtIdent(data.rol_admins)|join(', ') }} WITH ADMIN OPTION;{% endif %}{% if data.rol_members and data.rol_members|length > 0 %} - -GRANT {{ conn|qtIdent(data.rolname) }} TO {{ conn|qtIdent(data.rol_members)|join(', ') }}; +GRANT {{ conn|qtIdent(data.rolname) }} TO {{ conn|qtIdent(item.role) }}{% if 'admin' in item and item.admin %} WITH ADMIN OPTION{% endif %}; +{% endfor %} {% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/update.sql b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/update.sql index 8f9daf10d7f..e6d12f8dd05 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/update.sql +++ b/web/pgadmin/browser/server_groups/servers/roles/templates/roles/sql/default/update.sql @@ -47,17 +47,27 @@ ALTER ROLE {{ conn|qtIdent(rolname) }}{% if 'rolcanlogin' in data %} PASSWORD{% if data.rolpassword is none %} NULL{% else %}{% if dummy %} 'xxxxxx'{% else %} {{ data.rolpassword|qtLiteral(conn) }}{% endif %}{% endif %}{% endif %};{% endif %} -{% if 'revoked_admins' in data and - data.revoked_admins|length > 0 -%} +{% if data.rolmembership_revoked_list and data.rolmembership_revoked_list|length > 0 %} +{% for item in data.rolmembership_revoked_list %} -REVOKE ADMIN OPTION FOR {{ conn|qtIdent(data.revoked_admins)|join(', ') }} FROM {{ conn|qtIdent(rolname) }};{% endif %}{% if 'revoked' in data and data.revoked|length > 0 %} - -REVOKE {{ conn|qtIdent(data.revoked)|join(', ') }} FROM {{ conn|qtIdent(rolname) }};{% endif %}{% if data.admins and data.admins|length > 0 %} +REVOKE {{ conn|qtIdent(item.role) }} FROM {{ conn|qtIdent(rolname) }}; +{% endfor %} +{% endif %} +{% if data.rolmembership_list and data.rolmembership_list|length > 0 %} +{% for item in data.rolmembership_list %} -GRANT {{ conn|qtIdent(data.admins)|join(', ') }} TO {{ conn|qtIdent(rolname) }} WITH ADMIN OPTION;{% endif %}{% if data.members and data.members|length > 0 %} +GRANT {{ conn|qtIdent(item.role) }} TO {{ conn|qtIdent(rolname) }}{% if 'admin' in item and item.admin %} WITH ADMIN OPTION{% endif %}; +{% endfor %} +{% endif %} +{% if data.rolmembership_revoked_admins and data.rolmembership_revoked_admins|length > 0 %} +{% for item in data.rolmembership_revoked_admins %} +{% if 'admin' in item and not item.admin %} -GRANT {{ conn|qtIdent(data.members)|join(', ') }} TO {{ conn|qtIdent(rolname) }};{% endif %}{% if data.seclabels and +REVOKE ADMIN OPTION FOR {{ conn|qtIdent(item.role) }} FROM {{ conn|qtIdent(rolname) }}; +{% endif %} +{% endfor %} +{% endif %} +{% if data.seclabels and data.seclabels|length > 0 %}{% set seclabels = data.seclabels %} {% if 'deleted' in seclabels and seclabels.deleted|length > 0 %} @@ -103,15 +113,23 @@ GRANT {{ conn|qtIdent(data.members)|join(', ') }} TO {{ conn|qtIdent(rolname) }} COMMENT ON ROLE {{ conn|qtIdent(rolname) }} IS {{ data.description|qtLiteral(conn) }}; {% endif %} +{% if data.rol_members_revoked_list and data.rol_members_revoked_list|length > 0 %} +{% for item in data.rol_members_revoked_list %} -{% if 'rol_revoked_admins' in data and - data.rol_revoked_admins|length > 0 -%} - -REVOKE ADMIN OPTION FOR {{ conn|qtIdent(rolname) }} FROM {{ conn|qtIdent(data.rol_revoked_admins)|join(', ') }};{% endif %}{% if 'rol_revoked' in data and data.rol_revoked|length > 0 %} - -REVOKE {{ conn|qtIdent(rolname) }} FROM {{ conn|qtIdent(data.rol_revoked)|join(', ') }};{% endif %}{% if data.rol_admins and data.rol_admins|length > 0 %} +REVOKE {{ conn|qtIdent(rolname) }} FROM {{ conn|qtIdent(item.role) }}; +{% endfor %} +{% endif %} +{% if data.rol_members_list and data.rol_members_list|length > 0 %} +{% for item in data.rol_members_list %} -GRANT {{ conn|qtIdent(rolname) }} TO {{ conn|qtIdent(data.rol_admins)|join(', ') }} WITH ADMIN OPTION;{% endif %}{% if data.rol_members and data.rol_members|length > 0 %} +GRANT {{ conn|qtIdent(rolname) }} TO {{ conn|qtIdent(item.role) }}{% if 'admin' in item and item.admin %} WITH ADMIN OPTION{% endif %}; +{% endfor %} +{% endif %} +{% if data.rol_members_revoked_admins and data.rol_members_revoked_admins|length > 0 %} +{% for item in data.rol_members_revoked_admins %} +{% if 'admin' in item and not item.admin %} -GRANT {{ conn|qtIdent(rolname) }} TO {{ conn|qtIdent(data.rol_members)|join(', ') }};{% endif %} +REVOKE ADMIN OPTION FOR {{ conn|qtIdent(rolname) }} FROM {{ conn|qtIdent(item.role) }}; +{% endif %} +{% endfor %} +{% endif %} diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_description.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_description.msql new file mode 100644 index 00000000000..0abf435055e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_description.msql @@ -0,0 +1 @@ +COMMENT ON ROLE "Role1_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_description.sql new file mode 100644 index 00000000000..c8f16a31691 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_description.sql @@ -0,0 +1,13 @@ +-- Role: "Role1_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role1_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role1_$%{}[]()&*^!@""'`\/#" WITH + LOGIN + SUPERUSER + INHERIT + CREATEDB + CREATEROLE + REPLICATION + BYPASSRLS; + +COMMENT ON ROLE "Role1_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_name.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_name.msql new file mode 100644 index 00000000000..088b078346c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_name.msql @@ -0,0 +1,2 @@ +ALTER ROLE "Role1_$%{}[]()&*^!@""'`\/#" + RENAME TO "Role2_$%{}[]()&*^!@""'`\/#"; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_name.sql new file mode 100644 index 00000000000..be6a483098c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_name.sql @@ -0,0 +1,13 @@ +-- Role: "Role2_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role2_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH + LOGIN + SUPERUSER + INHERIT + CREATEDB + CREATEROLE + REPLICATION + BYPASSRLS; + +COMMENT ON ROLE "Role2_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_options.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_options.msql new file mode 100644 index 00000000000..92c0d420134 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_options.msql @@ -0,0 +1,12 @@ +ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" + NOSUPERUSER + NOCREATEDB + NOREPLICATION + NOBYPASSRLS + CONNECTION LIMIT 100 + + VALID UNTIL '2050-01-01T00:00:00+05:30' + PASSWORD 'xxxxxx'; + +ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres + SET application_name TO 'pg4'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_options.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_options.sql new file mode 100644 index 00000000000..ce772b96016 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_login_role_options.sql @@ -0,0 +1,18 @@ +-- Role: "Role2_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role2_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH + LOGIN + NOSUPERUSER + INHERIT + NOCREATEDB + CREATEROLE + NOREPLICATION + NOBYPASSRLS + CONNECTION LIMIT 100 + ENCRYPTED PASSWORD '' + VALID UNTIL ''; + +ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; + +COMMENT ON ROLE "Role2_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_description.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_description.msql new file mode 100644 index 00000000000..0abf435055e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_description.msql @@ -0,0 +1 @@ +COMMENT ON ROLE "Role1_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_description.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_description.sql new file mode 100644 index 00000000000..67279efd1f6 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_description.sql @@ -0,0 +1,13 @@ +-- Role: "Role1_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role1_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role1_$%{}[]()&*^!@""'`\/#" WITH + NOLOGIN + NOSUPERUSER + INHERIT + NOCREATEDB + NOCREATEROLE + NOREPLICATION + NOBYPASSRLS; + +COMMENT ON ROLE "Role1_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_name.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_name.msql new file mode 100644 index 00000000000..088b078346c --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_name.msql @@ -0,0 +1,2 @@ +ALTER ROLE "Role1_$%{}[]()&*^!@""'`\/#" + RENAME TO "Role2_$%{}[]()&*^!@""'`\/#"; \ No newline at end of file diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_name.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_name.sql new file mode 100644 index 00000000000..604676c7d13 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_name.sql @@ -0,0 +1,13 @@ +-- Role: "Role2_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role2_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH + NOLOGIN + NOSUPERUSER + INHERIT + NOCREATEDB + NOCREATEROLE + NOREPLICATION + NOBYPASSRLS; + +COMMENT ON ROLE "Role2_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options1.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options1.msql new file mode 100644 index 00000000000..c4e291b1c01 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options1.msql @@ -0,0 +1,19 @@ +ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" + SUPERUSER + CREATEDB + NOREPLICATION + CONNECTION LIMIT 100 + + VALID UNTIL '2050-01-01T00:00:00+05:30' + PASSWORD 'xxxxxx'; + +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN True, INHERIT True, SET True; + +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN False, INHERIT False, SET False; + +ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres + SET application_name TO 'pg4'; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_3 WITH ADMIN True, INHERIT True, SET True; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_4 WITH ADMIN False, INHERIT False, SET False; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options1.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options1.sql new file mode 100644 index 00000000000..f71dbbf8eb0 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options1.sql @@ -0,0 +1,21 @@ +-- Role: "Role2_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role2_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH + NOLOGIN + SUPERUSER + INHERIT + CREATEDB + NOCREATEROLE + NOREPLICATION + NOBYPASSRLS + CONNECTION LIMIT 100 + ENCRYPTED PASSWORD '' + VALID UNTIL ''; + +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#"; +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION, INHERIT OPTION, SET OPTION; + +ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; + +COMMENT ON ROLE "Role2_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options2.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options2.msql new file mode 100644 index 00000000000..8544090581a --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options2.msql @@ -0,0 +1,7 @@ +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN False, INHERIT False, SET False; + +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN True, INHERIT True, SET True; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_3 WITH ADMIN False, INHERIT False, SET False; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_4 WITH ADMIN True, INHERIT True, SET True; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options2.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options2.sql new file mode 100644 index 00000000000..b228f0e11a6 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options2.sql @@ -0,0 +1,21 @@ +-- Role: "Role2_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role2_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH + NOLOGIN + SUPERUSER + INHERIT + CREATEDB + NOCREATEROLE + NOREPLICATION + NOBYPASSRLS + CONNECTION LIMIT 100 + ENCRYPTED PASSWORD '' + VALID UNTIL '2050-01-01 00:00:00+05:30'; + +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#"; +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION, INHERIT OPTION, SET OPTION; + +ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; + +COMMENT ON ROLE "Role2_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options3.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options3.msql new file mode 100644 index 00000000000..3de70e1dcb8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options3.msql @@ -0,0 +1,3 @@ +REVOKE test_rolemembership_1 FROM "Role2_$%{}[]()&*^!@""'`\/#"; + +REVOKE "Role2_$%{}[]()&*^!@""'`\/#" FROM test_rolemembership_3; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options3.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options3.sql new file mode 100644 index 00000000000..ca1f7e51ba8 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options3.sql @@ -0,0 +1,20 @@ +-- Role: "Role2_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role2_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH + NOLOGIN + SUPERUSER + INHERIT + CREATEDB + NOCREATEROLE + NOREPLICATION + NOBYPASSRLS + CONNECTION LIMIT 100 + ENCRYPTED PASSWORD '' + VALID UNTIL '2050-01-01 00:00:00+05:30'; + +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION, INHERIT OPTION, SET OPTION; + +ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; + +COMMENT ON ROLE "Role2_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options4.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options4.msql new file mode 100644 index 00000000000..447b2ef596e --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options4.msql @@ -0,0 +1,7 @@ +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN True, INHERIT True, SET True; + +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN False, INHERIT False, SET False; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_3 WITH ADMIN True, INHERIT True, SET True; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_4 WITH ADMIN False, INHERIT False, SET False; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options4.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options4.sql new file mode 100644 index 00000000000..d5a76eeda0d --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/alter_role_options4.sql @@ -0,0 +1,21 @@ +-- Role: "Role2_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role2_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH + NOLOGIN + SUPERUSER + INHERIT + CREATEDB + NOCREATEROLE + NOREPLICATION + NOBYPASSRLS + CONNECTION LIMIT 100 + ENCRYPTED PASSWORD '' + VALID UNTIL '2050-01-01 00:00:00+05:30'; + +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#"; +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION, INHERIT OPTION, SET OPTION; + +ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; + +COMMENT ON ROLE "Role2_$%{}[]()&*^!@""'`\/#" IS 'This is detailed description'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_login_role.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_login_role.msql new file mode 100644 index 00000000000..3ebaab48469 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_login_role.msql @@ -0,0 +1,9 @@ +CREATE ROLE "Role1_$%{}[]()&*^!@""'`\/#" WITH + LOGIN + SUPERUSER + CREATEDB + CREATEROLE + INHERIT + REPLICATION + BYPASSRLS + CONNECTION LIMIT -1; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_login_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_login_role.sql new file mode 100644 index 00000000000..2e408524778 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_login_role.sql @@ -0,0 +1,11 @@ +-- Role: "Role1_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role1_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role1_$%{}[]()&*^!@""'`\/#" WITH + LOGIN + SUPERUSER + INHERIT + CREATEDB + CREATEROLE + REPLICATION + BYPASSRLS; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_role.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_role.msql new file mode 100644 index 00000000000..5d0c2026ece --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_role.msql @@ -0,0 +1,9 @@ +CREATE ROLE "Role1_$%{}[]()&*^!@""'`\/#" WITH + NOLOGIN + NOSUPERUSER + NOCREATEDB + NOCREATEROLE + INHERIT + NOREPLICATION + NOBYPASSRLS + CONNECTION LIMIT -1; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_role.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_role.sql new file mode 100644 index 00000000000..bf6054895eb --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/create_role.sql @@ -0,0 +1,11 @@ +-- Role: "Role1_$%{}[]()&*^!@""'`\/#" +-- DROP ROLE IF EXISTS "Role1_$%{}[]()&*^!@""'`\/#"; + +CREATE ROLE "Role1_$%{}[]()&*^!@""'`\/#" WITH + NOLOGIN + NOSUPERUSER + INHERIT + NOCREATEDB + NOCREATEROLE + NOREPLICATION + NOBYPASSRLS; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/test.json b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/test.json new file mode 100644 index 00000000000..bd1b249d340 --- /dev/null +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/16_plus/test.json @@ -0,0 +1,299 @@ +{ + "scenarios": [ + { + "type": "create", + "name": "Create Role 1 for testing rolemembership", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "data": { + "rolname": "test_rolemembership_1", + "rolcanlogin": false, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": false, + "rolcreaterole": false, + "rolcreatedb": false, + "rolinherit": true, + "rolreplication": false, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "store_object_id": true + }, + { + "type": "create", + "name": "Create Role 2 for testing rolemembership", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "data": { + "rolname": "test_rolemembership_2", + "rolcanlogin": false, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": false, + "rolcreaterole": false, + "rolcreatedb": false, + "rolinherit": true, + "rolreplication": false, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "store_object_id": true + }, + { + "type": "create", + "name": "Create Role 3 for testing rolemembership", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "data": { + "rolname": "test_rolemembership_3", + "rolcanlogin": false, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": false, + "rolcreaterole": false, + "rolcreatedb": false, + "rolinherit": true, + "rolreplication": false, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "store_object_id": true + }, + { + "type": "create", + "name": "Create Role 4 for testing rolemembership", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "data": { + "rolname": "test_rolemembership_4", + "rolcanlogin": false, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": false, + "rolcreaterole": false, + "rolcreatedb": false, + "rolinherit": true, + "rolreplication": false, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "store_object_id": true + }, + { + "type": "create", + "name": "Create Role", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql", + "data": { + "rolname": "Role1_$%{}[]()&*^!@\"'`\\/#", + "rolcanlogin": false, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": false, + "rolcreaterole": false, + "rolcreatedb": false, + "rolinherit": true, + "rolreplication": false, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "expected_sql_file": "create_role.sql", + "expected_msql_file": "create_role.msql" + }, + { + "type": "alter", + "name": "Alter Role description", + "endpoint": "NODE-role.obj_id", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql_id", + "data": { + "description": "This is detailed description" + }, + "expected_sql_file": "alter_role_description.sql", + "expected_msql_file": "alter_role_description.msql" + }, + { + "type": "alter", + "name": "Alter Role name", + "endpoint": "NODE-role.obj_id", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql_id", + "data": { + "rolname": "Role2_$%{}[]()&*^!@\"'`\\/#" + }, + "expected_sql_file": "alter_role_name.sql", + "expected_msql_file": "alter_role_name.msql" + }, + { + "type": "alter", + "name": "Alter Role options 1", + "endpoint": "NODE-role.obj_id", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql_id", + "data": { + "rolsuper": true, + "rolcreatedb": true, + "rolreplication": false, + "rolpassword": "abc123", + "rolconnlimit": 100, + "rolvaliduntil": "2050-01-01 00:00:00 +05:30", + "variables": { "added": [{"name":"application_name","value":"pg4","database":"postgres"}] }, + "rolmembership": { "added": [{"role": "test_rolemembership_1", "admin": true, "inherit": true, "set": true}, {"role": "test_rolemembership_2", "admin": false, "inherit": false, "set": false}] }, + "rolmembers": { "added": [{"role": "test_rolemembership_3", "admin": true, "inherit": true, "set": true}, {"role": "test_rolemembership_4", "admin": false, "inherit": false, "set": false}] } + }, + "expected_sql_file": "alter_role_options1.sql", + "expected_msql_file": "alter_role_options1.msql", + "convert_timestamp_columns": ["rolvaliduntil"], + "replace_password": true + }, + { + "type": "alter", + "name": "Alter Role options 2", + "endpoint": "NODE-role.obj_id", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql_id", + "data": { + "rolmembership": { "changed": [{"role": "test_rolemembership_1", "admin": false, "inherit": false, "set": false}, {"role": "test_rolemembership_2", "admin": true, "inherit": true, "set": true}] }, + "rolmembers": { "changed": [{"role": "test_rolemembership_3", "admin": false, "inherit": false, "set": false}, {"role": "test_rolemembership_4", "admin": true, "inherit": true, "set": true}] } + }, + "expected_sql_file": "alter_role_options2.sql", + "expected_msql_file": "alter_role_options2.msql", + "convert_timestamp_columns": ["rolvaliduntil"], + "replace_password": true, + "replace_regex_pattern": ["VALID UNTIL '[0-9\\-T:+ ]*'"] + }, + { + "type": "alter", + "name": "Alter Role options 3", + "endpoint": "NODE-role.obj_id", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql_id", + "data": { + "rolmembership": { "deleted": [{"role": "test_rolemembership_1"}] }, + "rolmembers": { "deleted": [{"role": "test_rolemembership_3"}] } + }, + "expected_sql_file": "alter_role_options3.sql", + "expected_msql_file": "alter_role_options3.msql", + "convert_timestamp_columns": ["rolvaliduntil"], + "replace_password": true, + "replace_regex_pattern": ["VALID UNTIL '[0-9\\-T:+ ]*'"] + }, + { + "type": "alter", + "name": "Alter Role options 4", + "endpoint": "NODE-role.obj_id", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql_id", + "data": { + "rolmembership": { + "added": [{"role": "test_rolemembership_1", "admin": true, "inherit": true, "set": true}], + "changed": [{"role": "test_rolemembership_2", "admin": false, "inherit": false, "set": false}] + }, + "rolmembers": { + "added": [{"role": "test_rolemembership_3", "admin": true, "inherit": true, "set": true}], + "changed": [{"role": "test_rolemembership_4", "admin": false, "inherit": false, "set": false}] + } + }, + "expected_sql_file": "alter_role_options4.sql", + "expected_msql_file": "alter_role_options4.msql", + "convert_timestamp_columns": ["rolvaliduntil"], + "replace_password": true, + "replace_regex_pattern": ["VALID UNTIL '[0-9\\-T:+ ]*'"] + }, + { + "type": "delete", + "name": "Drop Role", + "endpoint": "NODE-role.obj_id", + "data": {} + }, + { + "type": "delete", + "name": "Drop Role", + "endpoint": "NODE-role.obj", + "data": {"ids": ["", "", "", ""]}, + "preprocess_data": true + }, + { + "type": "create", + "name": "Create Login Role", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql", + "data": { + "rolname": "Role1_$%{}[]()&*^!@\"'`\\/#", + "rolcanlogin": true, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": true, + "rolcreaterole": true, + "rolcreatedb": true, + "rolinherit": true, + "rolreplication": true, + "rolbypassrls": true, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "expected_sql_file": "create_login_role.sql", + "expected_msql_file": "create_login_role.msql" + }, + { + "type": "alter", + "name": "Alter Login Role description", + "endpoint": "NODE-role.obj_id", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql_id", + "data": { + "description": "This is detailed description" + }, + "expected_sql_file": "alter_login_role_description.sql", + "expected_msql_file": "alter_login_role_description.msql" + }, + { + "type": "alter", + "name": "Alter Login Role name", + "endpoint": "NODE-role.obj_id", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql_id", + "data": { + "rolname": "Role2_$%{}[]()&*^!@\"'`\\/#" + }, + "expected_sql_file": "alter_login_role_name.sql", + "expected_msql_file": "alter_login_role_name.msql" + }, + { + "type": "alter", + "name": "Alter Login Role options", + "endpoint": "NODE-role.obj_id", + "sql_endpoint": "NODE-role.sql_id", + "msql_endpoint": "NODE-role.msql_id", + "data": { + "rolsuper": false, + "rolcreatedb": false, + "rolreplication": false, + "rolbypassrls": false, + "rolpassword": "abc123", + "rolconnlimit": 100, + "rolvaliduntil": "2050-01-01 00:00:00 +05:30", + "variables": { "added": [{"name":"application_name","value":"pg4","database":"postgres"}] } + }, + "expected_sql_file": "alter_login_role_options.sql", + "expected_msql_file": "alter_login_role_options.msql", + "convert_timestamp_columns": ["rolvaliduntil"], + "replace_password": true + }, + { + "type": "delete", + "name": "Drop Login Role", + "endpoint": "NODE-role.obj_id", + "data": {} + } + ] +} diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options1.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options1.msql index cd6738440ca..a00fa578f07 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options1.msql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options1.msql @@ -8,6 +8,12 @@ ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" PASSWORD 'xxxxxx'; GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; + GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#"; + ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_3 WITH ADMIN OPTION; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_4; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options2.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options2.msql index 06672e89378..94bd9637f16 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options2.msql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options2.msql @@ -1,2 +1,7 @@ -REVOKE ADMIN OPTION FOR test_rolemembership_1 FROM "Role2_$%{}[]()&*^!@""'`\/#"; GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; + +REVOKE ADMIN OPTION FOR test_rolemembership_1 FROM "Role2_$%{}[]()&*^!@""'`\/#"; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_4 WITH ADMIN OPTION; + +REVOKE ADMIN OPTION FOR "Role2_$%{}[]()&*^!@""'`\/#" FROM test_rolemembership_3; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options3.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options3.msql index ab13abdd682..3de70e1dcb8 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options3.msql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options3.msql @@ -1 +1,3 @@ REVOKE test_rolemembership_1 FROM "Role2_$%{}[]()&*^!@""'`\/#"; + +REVOKE "Role2_$%{}[]()&*^!@""'`\/#" FROM test_rolemembership_3; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options4.msql b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options4.msql index d987e1c7f0b..d900fe39c40 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options4.msql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options4.msql @@ -1 +1,7 @@ -GRANT test_rolemembership_1, test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; + +REVOKE ADMIN OPTION FOR test_rolemembership_2 FROM "Role2_$%{}[]()&*^!@""'`\/#"; + +GRANT "Role2_$%{}[]()&*^!@""'`\/#" TO test_rolemembership_3 WITH ADMIN OPTION; + +REVOKE ADMIN OPTION FOR "Role2_$%{}[]()&*^!@""'`\/#" FROM test_rolemembership_4; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options4.sql b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options4.sql index 1814b956899..7ef7414768a 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options4.sql +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/default/alter_role_options4.sql @@ -13,7 +13,8 @@ CREATE ROLE "Role2_$%{}[]()&*^!@""'`\/#" WITH ENCRYPTED PASSWORD '' VALID UNTIL '2050-01-01 00:00:00+05:30'; -GRANT test_rolemembership_1, test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; +GRANT test_rolemembership_2 TO "Role2_$%{}[]()&*^!@""'`\/#"; +GRANT test_rolemembership_1 TO "Role2_$%{}[]()&*^!@""'`\/#" WITH ADMIN OPTION; ALTER ROLE "Role2_$%{}[]()&*^!@""'`\/#" IN DATABASE postgres SET application_name TO 'pg4'; diff --git a/web/pgadmin/browser/server_groups/servers/roles/tests/default/test.json b/web/pgadmin/browser/server_groups/servers/roles/tests/default/test.json index b5ea013e6cb..454a76abf6e 100644 --- a/web/pgadmin/browser/server_groups/servers/roles/tests/default/test.json +++ b/web/pgadmin/browser/server_groups/servers/roles/tests/default/test.json @@ -42,6 +42,48 @@ }, "store_object_id": true }, + { + "type": "create", + "name": "Create Role 3 for testing rolemembership", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "data": { + "rolname": "test_rolemembership_3", + "rolcanlogin": false, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": false, + "rolcreaterole": false, + "rolcreatedb": false, + "rolinherit": true, + "rolreplication": false, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "store_object_id": true + }, + { + "type": "create", + "name": "Create Role 4 for testing rolemembership", + "endpoint": "NODE-role.obj", + "sql_endpoint": "NODE-role.sql_id", + "data": { + "rolname": "test_rolemembership_4", + "rolcanlogin": false, + "rolpassword": null, + "rolconnlimit": -1, + "rolsuper": false, + "rolcreaterole": false, + "rolcreatedb": false, + "rolinherit": true, + "rolreplication": false, + "rolmembership": [], + "seclabels": [], + "variables": [] + }, + "store_object_id": true + }, { "type": "create", "name": "Create Role", @@ -103,7 +145,8 @@ "rolconnlimit": 100, "rolvaliduntil": "2050-01-01 00:00:00 +05:30", "variables": { "added": [{"name":"application_name","value":"pg4","database":"postgres"}] }, - "rolmembership": { "added": [{"role": "test_rolemembership_1", "admin": true}, {"role": "test_rolemembership_2", "admin": false}] } + "rolmembership": { "added": [{"role": "test_rolemembership_1", "admin": true}, {"role": "test_rolemembership_2", "admin": false}] }, + "rolmembers": { "added": [{"role": "test_rolemembership_3", "admin": true}, {"role": "test_rolemembership_4", "admin": false}] } }, "expected_sql_file": "alter_role_options1.sql", "expected_msql_file": "alter_role_options1.msql", @@ -117,7 +160,8 @@ "sql_endpoint": "NODE-role.sql_id", "msql_endpoint": "NODE-role.msql_id", "data": { - "rolmembership": { "changed": [{"role": "test_rolemembership_1", "admin": false}, {"role": "test_rolemembership_2", "admin": true}] } + "rolmembership": { "changed": [{"role": "test_rolemembership_1", "admin": false}, {"role": "test_rolemembership_2", "admin": true}] }, + "rolmembers": { "changed": [{"role": "test_rolemembership_3", "admin": false}, {"role": "test_rolemembership_4", "admin": true}] } }, "expected_sql_file": "alter_role_options2.sql", "expected_msql_file": "alter_role_options2.msql", @@ -132,7 +176,8 @@ "sql_endpoint": "NODE-role.sql_id", "msql_endpoint": "NODE-role.msql_id", "data": { - "rolmembership": { "deleted": [{"role": "test_rolemembership_1"}] } + "rolmembership": { "deleted": [{"role": "test_rolemembership_1"}] }, + "rolmembers": { "deleted": [{"role": "test_rolemembership_3"}] } }, "expected_sql_file": "alter_role_options3.sql", "expected_msql_file": "alter_role_options3.msql", @@ -149,7 +194,11 @@ "data": { "rolmembership": { "added": [{"role": "test_rolemembership_1", "admin": true}], - "changed": [{"role": "test_rolemembership_2", "admin": true}] + "changed": [{"role": "test_rolemembership_2", "admin": false}] + }, + "rolmembers": { + "added": [{"role": "test_rolemembership_3", "admin": true}], + "changed": [{"role": "test_rolemembership_4", "admin": false}] } }, "expected_sql_file": "alter_role_options4.sql", @@ -168,7 +217,7 @@ "type": "delete", "name": "Drop Role", "endpoint": "NODE-role.obj", - "data": {"ids": ["", ""]}, + "data": {"ids": ["", "", "", ""]}, "preprocess_data": true }, { diff --git a/web/pgadmin/browser/server_groups/servers/static/js/membership.ui.js b/web/pgadmin/browser/server_groups/servers/static/js/membership.ui.js index 81bb7cf9600..2f453df17bf 100644 --- a/web/pgadmin/browser/server_groups/servers/static/js/membership.ui.js +++ b/web/pgadmin/browser/server_groups/servers/static/js/membership.ui.js @@ -15,15 +15,18 @@ import { getNodeListByName } from '../../../../static/js/node_ajax'; export function getMembershipSchema(nodeObj, treeNodeInfo, itemNodeData) { return new MembershipSchema( ()=>getNodeListByName('role', treeNodeInfo, itemNodeData, {}, ()=>true), + treeNodeInfo.server ); } export default class MembershipSchema extends BaseUISchema { - constructor(roleMembersOptions) { + constructor(roleMembersOptions, node_info={}) { super({ role: undefined, - admin: undefined + admin: (node_info) && node_info.version >= 160000 ? false : undefined, + inherit: undefined, + set: (node_info) && node_info.version >= 160000 ? true : undefined, }); this.roleMembersOptions = roleMembersOptions; } @@ -43,18 +46,38 @@ export default class MembershipSchema extends BaseUISchema { return !obj.isNew(state); }, noEmpty: true, - minWidth: 300 + width: 150 }, { id: 'admin', label: gettext('WITH ADMIN'), cell: 'checkbox', type: 'checkbox', - minWidth: 300, + minWidth: 100, deps: ['role'], depChange: (state) => { if(_.isUndefined(state.admin)) { state.admin = false; } } + },{ + id: 'inherit', label: gettext('WITH INHERIT'), + cell: 'checkbox', type: 'checkbox', + minWidth: 100, min_version: 160000, + deps: ['role'], + depChange: (state) => { + if(_.isUndefined(state.inherit)) { + state.inherit = false; + } + } + },{ + id: 'set', label: gettext('WITH SET'), + cell: 'checkbox', type: 'checkbox', + minWidth: 100, min_version: 160000, + deps: ['role'], + depChange: (state) => { + if(_.isUndefined(state.set)) { + state.set = false; + } + } }, ]; } diff --git a/web/pgadmin/static/js/SchemaView/DataGridView/utils/createGridColumns.jsx b/web/pgadmin/static/js/SchemaView/DataGridView/utils/createGridColumns.jsx index 21c258ee85f..d6098ff7545 100644 --- a/web/pgadmin/static/js/SchemaView/DataGridView/utils/createGridColumns.jsx +++ b/web/pgadmin/static/js/SchemaView/DataGridView/utils/createGridColumns.jsx @@ -8,7 +8,7 @@ ////////////////////////////////////////////////////////////// -import { isModeSupportedByField } from 'sources/SchemaView/common'; +import { isModeSupportedByField, isVersionSupportedByField } from 'sources/SchemaView/common'; import { getMappedCell } from '../mappedCell'; @@ -49,7 +49,7 @@ export function createGridColumns({schema, field, viewHelperProps}) { ); columnVisibility[field.id] = isModeSupportedByField( field, viewHelperProps - ); + ) && isVersionSupportedByField(field, viewHelperProps); return { header: field.label||<> , diff --git a/web/pgadmin/static/js/SchemaView/common.js b/web/pgadmin/static/js/SchemaView/common.js index 0cd026e54ad..08c1f926610 100644 --- a/web/pgadmin/static/js/SchemaView/common.js +++ b/web/pgadmin/static/js/SchemaView/common.js @@ -16,6 +16,19 @@ export const isModeSupportedByField = (field, helperProps) => ( !field.mode || field.mode.indexOf(helperProps.mode) > -1 ); +export const isVersionSupportedByField = (field, helperProps) => { + return ( + // serverInfo not found + _.isUndefined(helperProps.serverInfo) || + // serverInfo found and it's within range + ( + _.isUndefined(field.min_version) ? true : + (helperProps.serverInfo.version >= field.min_version) + ) && ( + _.isUndefined(field.max_version) ? true : + (helperProps.serverInfo.version <= field.max_version) + )); +}; /* * Compare the sessData with schema.origData. From 97f6827e058fa7250692febc9a9e4b08c5bff96a Mon Sep 17 00:00:00 2001 From: Anil Sahoo Date: Wed, 14 Jan 2026 18:38:01 +0530 Subject: [PATCH 2/2] Fixed review comments on code optimization and coderabbit review comments --- .../servers/static/js/membership.ui.js | 2 +- .../DataGridView/utils/createGridColumns.jsx | 4 ++-- web/pgadmin/static/js/SchemaView/common.js | 5 +++- .../static/js/SchemaView/options/index.js | 24 ++++++------------- 4 files changed, 14 insertions(+), 21 deletions(-) diff --git a/web/pgadmin/browser/server_groups/servers/static/js/membership.ui.js b/web/pgadmin/browser/server_groups/servers/static/js/membership.ui.js index 2f453df17bf..aad9f4fdea9 100644 --- a/web/pgadmin/browser/server_groups/servers/static/js/membership.ui.js +++ b/web/pgadmin/browser/server_groups/servers/static/js/membership.ui.js @@ -75,7 +75,7 @@ export default class MembershipSchema extends BaseUISchema { deps: ['role'], depChange: (state) => { if(_.isUndefined(state.set)) { - state.set = false; + state.set = true; } } }, diff --git a/web/pgadmin/static/js/SchemaView/DataGridView/utils/createGridColumns.jsx b/web/pgadmin/static/js/SchemaView/DataGridView/utils/createGridColumns.jsx index d6098ff7545..917997cdd11 100644 --- a/web/pgadmin/static/js/SchemaView/DataGridView/utils/createGridColumns.jsx +++ b/web/pgadmin/static/js/SchemaView/DataGridView/utils/createGridColumns.jsx @@ -8,7 +8,7 @@ ////////////////////////////////////////////////////////////// -import { isModeSupportedByField, isVersionSupportedByField } from 'sources/SchemaView/common'; +import { isModeSupportedByField, isFieldSupportedByPgVersion } from 'sources/SchemaView/common'; import { getMappedCell } from '../mappedCell'; @@ -49,7 +49,7 @@ export function createGridColumns({schema, field, viewHelperProps}) { ); columnVisibility[field.id] = isModeSupportedByField( field, viewHelperProps - ) && isVersionSupportedByField(field, viewHelperProps); + ) && isFieldSupportedByPgVersion(field, viewHelperProps); return { header: field.label||<> , diff --git a/web/pgadmin/static/js/SchemaView/common.js b/web/pgadmin/static/js/SchemaView/common.js index 08c1f926610..f4bd0ad7aba 100644 --- a/web/pgadmin/static/js/SchemaView/common.js +++ b/web/pgadmin/static/js/SchemaView/common.js @@ -16,12 +16,15 @@ export const isModeSupportedByField = (field, helperProps) => ( !field.mode || field.mode.indexOf(helperProps.mode) > -1 ); -export const isVersionSupportedByField = (field, helperProps) => { +export const isFieldSupportedByPgVersion = (field, helperProps) => { return ( // serverInfo not found _.isUndefined(helperProps.serverInfo) || // serverInfo found and it's within range ( + _.isUndefined(field.server_type) ? true : + (helperProps.serverInfo.type in field.server_type) + ) && ( _.isUndefined(field.min_version) ? true : (helperProps.serverInfo.version >= field.min_version) ) && ( diff --git a/web/pgadmin/static/js/SchemaView/options/index.js b/web/pgadmin/static/js/SchemaView/options/index.js index 7772d8c27bf..07e73ba4351 100644 --- a/web/pgadmin/static/js/SchemaView/options/index.js +++ b/web/pgadmin/static/js/SchemaView/options/index.js @@ -15,6 +15,10 @@ import { evalInNonPropertyMode, FIELD_OPTIONS } from './common'; +import { + isFieldSupportedByPgVersion, + isModeSupportedByField +} from '../common'; import { evaluateFieldOptions, evaluateFieldsOption, @@ -45,23 +49,9 @@ registerOptionEvaluator( VISIBLE, // Evaluator ({schema, field, value, viewHelperProps}) => ( - ( - !field.mode || field.mode.indexOf(viewHelperProps.mode) > -1 - ) && ( - // serverInfo not found - _.isUndefined(viewHelperProps.serverInfo) || - // serverInfo found and it's within range - (( - _.isUndefined(field.server_type) ? true : - (viewHelperProps.serverInfo.type in field.server_type) - ) && ( - _.isUndefined(field.min_version) ? true : - (viewHelperProps.serverInfo.version >= field.min_version) - ) && ( - _.isUndefined(field.max_version) ? true : - (viewHelperProps.serverInfo.version <= field.max_version) - )) - ) && ( + isModeSupportedByField(field, viewHelperProps) + && isFieldSupportedByPgVersion(field, viewHelperProps) + && ( _.isUndefined(field[VISIBLE]) ? true : Boolean(evalFunc(schema, field[VISIBLE], value)) )),