From 42e72ac9d5a12feb82b6f5539100c241d9c26808 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Juan=20Ignacio=20S=C3=A1nchez=20Lara?= Date: Mon, 10 Aug 2015 11:07:41 +0200 Subject: [PATCH] cartodb.CDB_Group_CreateGroup cartodb.CDB_Group_DropGroup --- scripts-available/CDB_Groups.sql | 31 +++++++++++++++++++++++++++++++ test/organization/test.sh | 10 ++++++++-- 2 files changed, 39 insertions(+), 2 deletions(-) create mode 100644 scripts-available/CDB_Groups.sql diff --git a/scripts-available/CDB_Groups.sql b/scripts-available/CDB_Groups.sql new file mode 100644 index 0000000..b393f91 --- /dev/null +++ b/scripts-available/CDB_Groups.sql @@ -0,0 +1,31 @@ +CREATE OR REPLACE +FUNCTION cartodb.CDB_Group_GroupRole(group_name text) + RETURNS TEXT AS $$ +BEGIN + RETURN cartoDB.CDB_Organization_Member_Group_Role_Member_Name() || '_g_' || group_name; +END +$$ LANGUAGE PLPGSQL; + +CREATE OR REPLACE +FUNCTION cartodb.CDB_Group_CreateGroup(group_name text) + RETURNS TEXT AS $$ +DECLARE + cdb_group_role TEXT; +BEGIN + -- TODO: escape group_name + cdb_group_role := cartodb.CDB_Group_GroupRole(group_name); + IF NOT EXISTS ( SELECT 1 FROM pg_roles WHERE rolname = cdb_group_role ) + THEN + EXECUTE 'CREATE ROLE "' || cdb_group_role || '" NOLOGIN;'; + END IF; + RETURN cdb_group_role; +END +$$ LANGUAGE PLPGSQL; + +CREATE OR REPLACE +FUNCTION cartodb.CDB_Group_DropGroup(group_name text) + RETURNS VOID AS $$ +BEGIN + EXECUTE 'DROP ROLE IF EXISTS "' || cartodb.CDB_Group_GroupRole(group_name) || '"'; +END +$$ LANGUAGE PLPGSQL; diff --git a/test/organization/test.sh b/test/organization/test.sh index 60e577e..0842c4c 100644 --- a/test/organization/test.sh +++ b/test/organization/test.sh @@ -11,6 +11,8 @@ DATABASE=test_organizations CMD='echo psql' CMD=psql +GROUP_A="group_a" + OK=0 PARTIALOK=0 @@ -137,7 +139,7 @@ function setup() { log_info "########################### BOOTSTRAP ###########################" ${CMD} -d ${DATABASE} -f scripts-available/CDB_Organizations.sql - + ${CMD} -d ${DATABASE} -f scripts-available/CDB_Groups.sql log_info "############################# SETUP #############################" create_role_and_schema cdb_testmember_1 @@ -152,8 +154,11 @@ function setup() { create_table cdb_testmember_2 bar sql cdb_testmember_2 'INSERT INTO bar VALUES (1), (2), (3), (4), (5);' sql cdb_testmember_2 'SELECT * FROM cdb_testmember_2.bar;' + + sql "SELECT cartodb.CDB_Group_CreateGroup('${GROUP_A}')" } + function tear_down() { log_info "########################### USER TEAR DOWN ###########################" sql cdb_testmember_1 "SELECT * FROM cartodb.CDB_Organization_Remove_Access_Permission('cdb_testmember_1', 'foo', 'cdb_testmember_2');" @@ -162,6 +167,8 @@ function tear_down() { sql cdb_testmember_1 'DROP TABLE cdb_testmember_1.foo;' sql cdb_testmember_2 'DROP TABLE cdb_testmember_2.bar;' + sql "select cartodb.CDB_Group_DropGroup('${GROUP_A}')" + sql "DROP SCHEMA cartodb CASCADE" log_info "########################### TEAR DOWN ###########################" @@ -393,7 +400,6 @@ function test_cdb_usertables_should_work_with_orgusers() { sql cdb_testmember_1 "DROP TABLE test_perms_priv" } - #################################################### TESTS END HERE ####################################################