|
107 | 107 |
|
108 | 108 | do $$
|
109 | 109 | declare
|
| 110 | + role_grants jsonb[] := ( |
| 111 | + select coalesce(array_agg(jsonb_build_object('role', r.rolname, 'member', m.rolname, 'grantor', g.rolname, 'admin_option', am.admin_option)), '{}') |
| 112 | + from pg_auth_members am |
| 113 | + join pg_authid r on r.oid = am.roleid |
| 114 | + join pg_authid m on m.oid = am.member |
| 115 | + join pg_authid g on g.oid = am.grantor |
| 116 | + ); |
110 | 117 | postgres_rolpassword text := (select rolpassword from pg_authid where rolname = 'postgres');
|
111 | 118 | supabase_admin_rolpassword text := (select rolpassword from pg_authid where rolname = 'supabase_admin');
|
112 | 119 | role_settings jsonb[] := (
|
@@ -216,27 +223,18 @@ begin
|
216 | 223 | select * from pg_auth_members
|
217 | 224 | loop
|
218 | 225 | execute(format('revoke %s from %s;', rec.roleid::regrole, rec.member::regrole));
|
| 226 | + end loop; |
| 227 | + for obj in array role_grants |
| 228 | + loop |
219 | 229 | execute(format(
|
220 |
| - 'grant %s to %s %s granted by %s;', |
221 |
| - case |
222 |
| - when rec.roleid = 'postgres'::regrole then 'supabase_admin' |
223 |
| - when rec.roleid = 'supabase_admin'::regrole then 'postgres' |
224 |
| - else rec.roleid::regrole |
225 |
| - end, |
| 230 | + 'grant %I to %I %s granted by %I;', |
| 231 | + obj->>'role', |
| 232 | + obj->>'member', |
226 | 233 | case
|
227 |
| - when rec.member = 'postgres'::regrole then 'supabase_admin' |
228 |
| - when rec.member = 'supabase_admin'::regrole then 'postgres' |
229 |
| - else rec.member::regrole |
230 |
| - end, |
231 |
| - case |
232 |
| - when rec.admin_option then 'with admin option' |
| 234 | + when obj->>'admin_option' = 'true' then 'with admin option' |
233 | 235 | else ''
|
234 | 236 | end,
|
235 |
| - case |
236 |
| - when rec.grantor = 'postgres'::regrole then 'supabase_admin' |
237 |
| - when rec.grantor = 'supabase_admin'::regrole then 'postgres' |
238 |
| - else rec.grantor::regrole |
239 |
| - end |
| 237 | + obj->>'grantor' |
240 | 238 | ));
|
241 | 239 | end loop;
|
242 | 240 |
|
@@ -362,7 +360,6 @@ begin
|
362 | 360 | end if;
|
363 | 361 | end loop;
|
364 | 362 | end loop;
|
365 |
| -
|
366 | 363 | foreach obj in array default_acls
|
367 | 364 | loop
|
368 | 365 | for rec in
|
|
0 commit comments