Enables pgAdmin to retrieve user permissions in case of nested roles which helps to terminate the session for AWS RDS. Fixes #6641

This commit is contained in:
Yogesh Mahajan
2021-08-24 17:01:06 +05:30
committed by Akshay Joshi
parent 008a458fe9
commit c7fd1ae535
4 changed files with 55 additions and 16 deletions

View File

@@ -605,11 +605,14 @@ WHERE db.datname = current_database()""")
can_create_role,
CASE WHEN roles.rolsuper THEN true
ELSE roles.rolcreatedb END as can_create_db,
CASE WHEN 'pg_signal_backend'=ANY(ARRAY(
SELECT pg_catalog.pg_roles.rolname FROM
pg_catalog.pg_auth_members m JOIN pg_catalog.pg_roles ON
(m.roleid = pg_catalog.pg_roles.oid) WHERE
m.member = roles.oid)) THEN True
CASE WHEN 'pg_signal_backend'=ANY(ARRAY(WITH RECURSIVE cte AS (
SELECT pg_roles.oid,pg_roles.rolname FROM pg_roles
WHERE pg_roles.oid = roles.oid
UNION ALL
SELECT m.roleid,pgr.rolname FROM cte cte_1
JOIN pg_auth_members m ON m.member = cte_1.oid
JOIN pg_roles pgr ON pgr.oid = m.roleid)
SELECT rolname FROM cte)) THEN True
ELSE False END as can_signal_backend
FROM
pg_catalog.pg_roles as roles