From 52f73b1a011d9480907c961d24ba0e67f5cd52aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Ignacio=20S=C3=A1nchez=20Lara?= Date: Mon, 10 Aug 2015 13:53:57 +0200 Subject: [PATCH] CDB_Group_Table_GrantReadWrite --- scripts-available/CDB_Groups.sql | 13 +++++++++++++ test/organization/test.sh | 17 ++++++++++++++++- 2 files changed, 29 insertions(+), 1 deletion(-) diff --git a/scripts-available/CDB_Groups.sql b/scripts-available/CDB_Groups.sql index af0e53a..00cc8c7 100644 --- a/scripts-available/CDB_Groups.sql +++ b/scripts-available/CDB_Groups.sql @@ -74,6 +74,19 @@ BEGIN END $$ LANGUAGE PLPGSQL; +-- Grants table write permission to a group +CREATE OR REPLACE +FUNCTION cartodb.CDB_Group_Table_GrantReadWrite(group_name text, username text, table_name text) + RETURNS VOID AS $$ +DECLARE + cdb_group_role TEXT; +BEGIN + cdb_group_role := cartodb._CDB_Group_GroupRole(group_name); + EXECUTE 'GRANT USAGE ON SCHEMA "' || username || '" TO "' || cdb_group_role || '"'; + EXECUTE 'GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE "' || username || '"."' || table_name || '" TO "' || cdb_group_role || '"'; +END +$$ LANGUAGE PLPGSQL; + -- Revokes all permissions on a table from a group CREATE OR REPLACE FUNCTION cartodb.CDB_Group_Table_RevokeAll(group_name text, username text, table_name text) diff --git a/test/organization/test.sh b/test/organization/test.sh index f19f236..2c2340d 100644 --- a/test/organization/test.sh +++ b/test/organization/test.sh @@ -403,7 +403,7 @@ function test_cdb_usertables_should_work_with_orgusers() { sql cdb_testmember_1 "DROP TABLE test_perms_priv" } -function test_CDB_Group_Table_GrantRead_should_grant_select_and_RevokeAll_should_remove() { +function test_CDB_Group_Table_GrantRead_should_grant_select_and_RevokeAll_should_remove_it() { create_table cdb_testmember_2 shared_with_group sql cdb_testmember_1 'SELECT count(*) FROM cdb_testmember_2.shared_with_group;' fails @@ -418,6 +418,21 @@ function test_CDB_Group_Table_GrantRead_should_grant_select_and_RevokeAll_should sql cdb_testmember_2 'DROP TABLE cdb_testmember_2.shared_with_group;' } +function test_CDB_Group_Table_GrantReadWrite_should_grant_insert_and_RevokeAll_should_remove_it() { + create_table cdb_testmember_2 shared_with_group + + sql cdb_testmember_1 'INSERT INTO cdb_testmember_2.shared_with_group VALUES (1), (2), (3), (4), (5)' fails + sql cdb_testmember_2 'INSERT INTO cdb_testmember_2.shared_with_group VALUES (1), (2), (3), (4), (5)' + sql cdb_testmember_2 "select cartoDB.CDB_Group_Table_GrantReadWrite('group_a', 'cdb_testmember_2', 'shared_with_group')" + sql cdb_testmember_1 'INSERT INTO cdb_testmember_2.shared_with_group VALUES (1), (2), (3), (4), (5)' + sql cdb_testmember_2 'INSERT INTO cdb_testmember_2.shared_with_group VALUES (1), (2), (3), (4), (5)' + sql cdb_testmember_2 "select cartoDB.CDB_Group_Table_RevokeAll('group_a', 'cdb_testmember_2', 'shared_with_group')" + sql cdb_testmember_1 'INSERT INTO cdb_testmember_2.shared_with_group VALUES (1), (2), (3), (4), (5)' fails + sql cdb_testmember_2 'INSERT INTO cdb_testmember_2.shared_with_group VALUES (1), (2), (3), (4), (5)' + + sql cdb_testmember_2 'DROP TABLE cdb_testmember_2.shared_with_group;' +} + #################################################### TESTS END HERE ####################################################