Skip to content

Commit affb656

Browse files
committed
roles
1 parent 893bcec commit affb656

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

packages/pgsql-test/src/admin.ts

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,10 +126,38 @@ export class DbAdmin {
126126
const sql = `
127127
DO $$
128128
BEGIN
129+
-- Create role if it doesn't exist
129130
IF NOT EXISTS (SELECT 1 FROM pg_roles WHERE rolname = '${user}') THEN
130131
CREATE ROLE ${user} LOGIN PASSWORD '${password}';
132+
END IF;
133+
134+
-- Grant anonymous role if not already granted
135+
IF NOT EXISTS (
136+
SELECT 1 FROM pg_auth_members am
137+
JOIN pg_roles r1 ON am.roleid = r1.oid
138+
JOIN pg_roles r2 ON am.member = r2.oid
139+
WHERE r1.rolname = '${anonRole}' AND r2.rolname = '${user}'
140+
) THEN
131141
GRANT ${anonRole} TO ${user};
142+
END IF;
143+
144+
-- Grant authenticated role if not already granted
145+
IF NOT EXISTS (
146+
SELECT 1 FROM pg_auth_members am
147+
JOIN pg_roles r1 ON am.roleid = r1.oid
148+
JOIN pg_roles r2 ON am.member = r2.oid
149+
WHERE r1.rolname = '${authRole}' AND r2.rolname = '${user}'
150+
) THEN
132151
GRANT ${authRole} TO ${user};
152+
END IF;
153+
154+
-- Grant administrator role if not already granted
155+
IF NOT EXISTS (
156+
SELECT 1 FROM pg_auth_members am
157+
JOIN pg_roles r1 ON am.roleid = r1.oid
158+
JOIN pg_roles r2 ON am.member = r2.oid
159+
WHERE r1.rolname = '${adminRole}' AND r2.rolname = '${user}'
160+
) THEN
133161
GRANT ${adminRole} TO ${user};
134162
END IF;
135163
END $$;

0 commit comments

Comments
 (0)