From 3330421887673ab7efb58f96d17ccfb9767f34eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Ignacio=20S=C3=A1nchez=20Lara?= Date: Fri, 25 Sep 2015 19:02:39 +0200 Subject: [PATCH] sync parameter at group functions closes #162 --- scripts-available/CDB_Groups.sql | 42 ++++++++++++++++++++++++++-- scripts-available/CDB_Groups_API.sql | 3 +- 2 files changed, 41 insertions(+), 4 deletions(-) diff --git a/scripts-available/CDB_Groups.sql b/scripts-available/CDB_Groups.sql index 541264d..3bc50da 100644 --- a/scripts-available/CDB_Groups.sql +++ b/scripts-available/CDB_Groups.sql @@ -104,11 +104,23 @@ FUNCTION cartodb.CDB_Group_Table_GrantRead(group_name text, username text, table RETURNS VOID AS $$ DECLARE group_role TEXT; +BEGIN + PERFORM cartodb.CDB_Group_Table_GrantRead(group_name, username, table_name, true); +END +$$ LANGUAGE PLPGSQL VOLATILE; + +CREATE OR REPLACE +FUNCTION cartodb.CDB_Group_Table_GrantRead(group_name text, username text, table_name text, sync boolean) + RETURNS VOID AS $$ +DECLARE + group_role TEXT; BEGIN group_role := cartodb._CDB_Group_GroupRole(group_name); EXECUTE format('GRANT USAGE ON SCHEMA %I TO %I', username, group_role); EXECUTE format('GRANT SELECT ON TABLE %I.%I TO %I', username, table_name, group_role ); - PERFORM cartodb._CDB_Group_Table_GrantPermission_API(group_name, username, table_name, 'r'); + IF(sync) THEN + PERFORM cartodb._CDB_Group_Table_GrantPermission_API(group_name, username, table_name, 'r'); + END IF; END $$ LANGUAGE PLPGSQL VOLATILE; @@ -118,12 +130,24 @@ FUNCTION cartodb.CDB_Group_Table_GrantReadWrite(group_name text, username text, RETURNS VOID AS $$ DECLARE group_role TEXT; +BEGIN + PERFORM cartodb.CDB_Group_Table_GrantReadWrite(group_name, username, table_name, true); +END +$$ LANGUAGE PLPGSQL VOLATILE; + +CREATE OR REPLACE +FUNCTION cartodb.CDB_Group_Table_GrantReadWrite(group_name text, username text, table_name text, sync boolean) + RETURNS VOID AS $$ +DECLARE + group_role TEXT; BEGIN group_role := cartodb._CDB_Group_GroupRole(group_name); EXECUTE format('GRANT USAGE ON SCHEMA %I TO %I', username, group_role); EXECUTE format('GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE %I.%I TO %I', username, table_name, group_role); PERFORM cartodb._CDB_Group_TableSequences_Permission(group_name, username, table_name, true); - PERFORM cartodb._CDB_Group_Table_GrantPermission_API(group_name, username, table_name, 'w'); + IF(sync) THEN + PERFORM cartodb._CDB_Group_Table_GrantPermission_API(group_name, username, table_name, 'w'); + END IF; END $$ LANGUAGE PLPGSQL VOLATILE; @@ -159,11 +183,23 @@ FUNCTION cartodb.CDB_Group_Table_RevokeAll(group_name text, username text, table RETURNS VOID AS $$ DECLARE group_role TEXT; +BEGIN + PERFORM cartodb.CDB_Group_Table_RevokeAll(group_name, username, table_name, true); +END +$$ LANGUAGE PLPGSQL VOLATILE; + +CREATE OR REPLACE +FUNCTION cartodb.CDB_Group_Table_RevokeAll(group_name text, username text, table_name text, sync boolean) + RETURNS VOID AS $$ +DECLARE + group_role TEXT; BEGIN group_role := cartodb._CDB_Group_GroupRole(group_name); EXECUTE format('REVOKE ALL ON TABLE %I.%I FROM %I', username, table_name, group_role); PERFORM cartodb._CDB_Group_TableSequences_Permission(group_name, username, table_name, false); - PERFORM cartodb._CDB_Group_Table_RevokeAllPermission_API(group_name, username, table_name); + IF(sync) THEN + PERFORM cartodb._CDB_Group_Table_RevokeAllPermission_API(group_name, username, table_name); + END IF; END $$ LANGUAGE PLPGSQL VOLATILE; diff --git a/scripts-available/CDB_Groups_API.sql b/scripts-available/CDB_Groups_API.sql index a854225..1416819 100644 --- a/scripts-available/CDB_Groups_API.sql +++ b/scripts-available/CDB_Groups_API.sql @@ -157,6 +157,7 @@ $$ $$ LANGUAGE 'plpythonu' VOLATILE; -- url must contain a '%s' placeholder that will be replaced by current_database, for security reasons. +-- headers = { 'Authorization': params['auth'], 'Content-Type': 'application/json', 'X-Forwarded-Proto': 'https' } CREATE OR REPLACE FUNCTION cartodb._CDB_Group_API_Request(method text, url text, body text, valid_return_codes int[]) RETURNS int AS @@ -167,7 +168,7 @@ $$ if params['host'] is None: return None - headers = { 'Authorization': params['auth'], 'Content-Type': 'application/json', 'X-Forwarded-Proto': 'https' } + headers = { 'Authorization': params['auth'], 'Content-Type': 'application/json' } retry = 3