comparison schema/manage_users.sql @ 269:0b2d9f96ddb8

Replace CTE with access privilege inquiry function call.
author Tom Gottfried <tom@intevation.de>
date Mon, 30 Jul 2018 12:26:54 +0200
parents 72062ca52746
children 750a9c9cd965
comparison
equal deleted inserted replaced
268:72062ca52746 269:0b2d9f96ddb8
36 SECURITY DEFINER 36 SECURITY DEFINER
37 STABLE PARALLEL SAFE; 37 STABLE PARALLEL SAFE;
38 38
39 39
40 CREATE OR REPLACE VIEW users.list_users WITH (security_barrier) AS 40 CREATE OR REPLACE VIEW users.list_users WITH (security_barrier) AS
41 WITH cur AS (
42 SELECT rolname
43 FROM pg_roles r JOIN pg_auth_members a ON r.oid = a.roleid
44 WHERE member = (
45 SELECT oid FROM pg_roles WHERE rolname = current_user))
46 SELECT r.rolname, p.* 41 SELECT r.rolname, p.*
47 FROM cur, internal.user_profiles p 42 FROM internal.user_profiles p
48 JOIN pg_roles u ON p.username = u.rolname 43 JOIN pg_roles u ON p.username = u.rolname
49 JOIN pg_auth_members a ON u.oid = a.member 44 JOIN pg_auth_members a ON u.oid = a.member
50 JOIN pg_roles r ON a.roleid = r.oid 45 JOIN pg_roles r ON a.roleid = r.oid
51 WHERE p.username = current_user 46 WHERE p.username = current_user
52 OR cur.rolname = 'waterway_admin' 47 OR pg_has_role('waterway_admin', 'MEMBER')
53 AND p.country = current_user_country() 48 AND p.country = current_user_country()
54 OR cur.rolname = 'sys_admin'; 49 OR pg_has_role('sys_admin', 'MEMBER');
55 50
56 51
57 CREATE OR REPLACE FUNCTION sys_admin.create_user( 52 CREATE OR REPLACE FUNCTION sys_admin.create_user(
58 userrole varchar, 53 userrole varchar,
59 username internal.user_profiles.username%TYPE, 54 username internal.user_profiles.username%TYPE,